ceph: add comments for handle_cap_flush_ack logic
authorJeff Layton <jlayton@kernel.org>
Wed, 18 Mar 2020 19:34:20 +0000 (15:34 -0400)
committerIlya Dryomov <idryomov@gmail.com>
Mon, 1 Jun 2020 11:22:52 +0000 (13:22 +0200)
Signed-off-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
fs/ceph/caps.c

index 74d05e5..056ad0d 100644 (file)
@@ -3471,14 +3471,26 @@ static void handle_cap_flush_ack(struct inode *inode, u64 flush_tid,
        bool wake_mdsc = false;
 
        list_for_each_entry_safe(cf, tmp_cf, &ci->i_cap_flush_list, i_list) {
+               /* Is this the one that was flushed? */
                if (cf->tid == flush_tid)
                        cleaned = cf->caps;
-               if (cf->caps == 0) /* capsnap */
+
+               /* Is this a capsnap? */
+               if (cf->caps == 0)
                        continue;
+
                if (cf->tid <= flush_tid) {
+                       /*
+                        * An earlier or current tid. The FLUSH_ACK should
+                        * represent a superset of this flush's caps.
+                        */
                        wake_ci |= __detach_cap_flush_from_ci(ci, cf);
                        list_add_tail(&cf->i_list, &to_remove);
                } else {
+                       /*
+                        * This is a later one. Any caps in it are still dirty
+                        * so don't count them as cleaned.
+                        */
                        cleaned &= ~cf->caps;
                        if (!cleaned)
                                break;