ceph: re-request max_size if cap auth changes
authorSage Weil <sage@newdream.net>
Sun, 7 Nov 2010 17:39:00 +0000 (09:39 -0800)
committerSage Weil <sage@newdream.net>
Sun, 7 Nov 2010 17:39:23 +0000 (09:39 -0800)
If the auth cap migrates to another MDS, clear requested_max_size so that
we resend any pending max_size increase requests.  This fixes potential
hangs on writes that extend a file and race with an cap migration between
MDSs.

Signed-off-by: Sage Weil <sage@newdream.net>
fs/ceph/caps.c

index 6e0942f..04b207b 100644 (file)
@@ -2689,6 +2689,11 @@ static void handle_cap_import(struct ceph_mds_client *mdsc,
                     NULL /* no caps context */);
        try_flush_caps(inode, session, NULL);
        up_read(&mdsc->snap_rwsem);
+
+       /* make sure we re-request max_size, if necessary */
+       spin_lock(&inode->i_lock);
+       ci->i_requested_max_size = 0;
+       spin_unlock(&inode->i_lock);
 }
 
 /*