ceph: touch existing cap when handling reply
authorYan, Zheng <zyan@redhat.com>
Wed, 23 Jan 2019 03:20:00 +0000 (11:20 +0800)
committerIlya Dryomov <idryomov@gmail.com>
Tue, 5 Mar 2019 17:55:17 +0000 (18:55 +0100)
Move cap to tail of session->s_caps list. So ceph_trim_caps() will
trim older caps first.

Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
Reviewed-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
fs/ceph/caps.c

index da5b56e..6fbdc1a 100644 (file)
@@ -657,6 +657,10 @@ void ceph_add_cap(struct inode *inode,
                session->s_nr_caps++;
                spin_unlock(&session->s_cap_lock);
        } else {
+               spin_lock(&session->s_cap_lock);
+               list_move_tail(&cap->session_caps, &session->s_caps);
+               spin_unlock(&session->s_cap_lock);
+
                if (cap->cap_gen < session->s_cap_gen)
                        cap->issued = cap->implemented = CEPH_CAP_PIN;