aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2010-11-07 12:39:00 -0500
committerSage Weil <sage@newdream.net>2010-11-07 12:39:23 -0500
commitfeb4cc9bb433bf1491ac5ffbba133f3258dacf06 (patch)
tree6339043d3fd867683459d9dc33f146b2f7e37d75
parent912a9b0319a8eb9e0834b19a25e01013ab2d6a9f (diff)
ceph: re-request max_size if cap auth changes
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>
-rw-r--r--fs/ceph/caps.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
index 6e0942f33dd8..04b207b0c842 100644
--- a/fs/ceph/caps.c
+++ b/fs/ceph/caps.c
@@ -2689,6 +2689,11 @@ static void handle_cap_import(struct ceph_mds_client *mdsc,
2689 NULL /* no caps context */); 2689 NULL /* no caps context */);
2690 try_flush_caps(inode, session, NULL); 2690 try_flush_caps(inode, session, NULL);
2691 up_read(&mdsc->snap_rwsem); 2691 up_read(&mdsc->snap_rwsem);
2692
2693 /* make sure we re-request max_size, if necessary */
2694 spin_lock(&inode->i_lock);
2695 ci->i_requested_max_size = 0;
2696 spin_unlock(&inode->i_lock);
2692} 2697}
2693 2698
2694/* 2699/*