ceph: clear CEPH_I_KICK_FLUSH flag inside __kick_flushing_caps()
authorYan, Zheng <zyan@redhat.com>
Thu, 20 Jun 2019 08:00:31 +0000 (16:00 +0800)
committerIlya Dryomov <idryomov@gmail.com>
Mon, 8 Jul 2019 12:01:44 +0000 (14:01 +0200)
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 2e22efd..82a3583 100644 (file)
@@ -1605,10 +1605,8 @@ retry:
        }
 
        // make sure flushsnap messages are sent in proper order.
-       if (ci->i_ceph_flags & CEPH_I_KICK_FLUSH) {
+       if (ci->i_ceph_flags & CEPH_I_KICK_FLUSH)
                __kick_flushing_caps(mdsc, session, ci, 0);
-               ci->i_ceph_flags &= ~CEPH_I_KICK_FLUSH;
-       }
 
        __ceph_flush_snaps(ci, session);
 out:
@@ -2050,10 +2048,8 @@ ack:
                if (cap == ci->i_auth_cap &&
                    (ci->i_ceph_flags &
                     (CEPH_I_KICK_FLUSH | CEPH_I_FLUSH_SNAPS))) {
-                       if (ci->i_ceph_flags & CEPH_I_KICK_FLUSH) {
+                       if (ci->i_ceph_flags & CEPH_I_KICK_FLUSH)
                                __kick_flushing_caps(mdsc, session, ci, 0);
-                               ci->i_ceph_flags &= ~CEPH_I_KICK_FLUSH;
-                       }
                        if (ci->i_ceph_flags & CEPH_I_FLUSH_SNAPS)
                                __ceph_flush_snaps(ci, session);
 
@@ -2323,6 +2319,8 @@ static void __kick_flushing_caps(struct ceph_mds_client *mdsc,
        int ret;
        u64 first_tid = 0;
 
+       ci->i_ceph_flags &= ~CEPH_I_KICK_FLUSH;
+
        list_for_each_entry(cf, &ci->i_cap_flush_list, i_list) {
                if (cf->tid < first_tid)
                        continue;
@@ -2412,7 +2410,6 @@ void ceph_early_kick_flushing_caps(struct ceph_mds_client *mdsc,
                 */
                if ((cap->issued & ci->i_flushing_caps) !=
                    ci->i_flushing_caps) {
-                       ci->i_ceph_flags &= ~CEPH_I_KICK_FLUSH;
                        /* encode_caps_cb() also will reset these sequence
                         * numbers. make sure sequence numbers in cap flush
                         * message match later reconnect message */
@@ -2452,7 +2449,6 @@ void ceph_kick_flushing_caps(struct ceph_mds_client *mdsc,
                        continue;
                }
                if (ci->i_ceph_flags & CEPH_I_KICK_FLUSH) {
-                       ci->i_ceph_flags &= ~CEPH_I_KICK_FLUSH;
                        __kick_flushing_caps(mdsc, session, ci,
                                             oldest_flush_tid);
                }
@@ -2480,7 +2476,6 @@ static void kick_flushing_inode_caps(struct ceph_mds_client *mdsc,
                oldest_flush_tid = __get_oldest_flush_tid(mdsc);
                spin_unlock(&mdsc->cap_dirty_lock);
 
-               ci->i_ceph_flags &= ~CEPH_I_KICK_FLUSH;
                __kick_flushing_caps(mdsc, session, ci, oldest_flush_tid);
                spin_unlock(&ci->i_ceph_lock);
        } else {