diff options
author | Sage Weil <sage@newdream.net> | 2010-06-09 19:47:10 -0400 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2010-06-10 16:30:07 -0400 |
commit | 3d7ded4d81d807c2f75f310a8d74a5d72be13a1b (patch) | |
tree | c633b938f72dcd39c84f2430c7d4025331ab4369 /fs/ceph/mds_client.c | |
parent | 9dbd412f56c453f15014396c6024b895c1485ccb (diff) |
ceph: release cap on import if we don't have the inode
If we get an IMPORT that give us a cap, but we don't have the inode, queue
a release (and try to send it immediately) so that the MDS doesn't get
stuck waiting for us.
Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs/ceph/mds_client.c')
-rw-r--r-- | fs/ceph/mds_client.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c index 29b4485cf1ca..d28b6a9c0f96 100644 --- a/fs/ceph/mds_client.c +++ b/fs/ceph/mds_client.c | |||
@@ -1176,8 +1176,8 @@ static int check_cap_flush(struct ceph_mds_client *mdsc, u64 want_flush_seq) | |||
1176 | /* | 1176 | /* |
1177 | * called under s_mutex | 1177 | * called under s_mutex |
1178 | */ | 1178 | */ |
1179 | static void send_cap_releases(struct ceph_mds_client *mdsc, | 1179 | void ceph_send_cap_releases(struct ceph_mds_client *mdsc, |
1180 | struct ceph_mds_session *session) | 1180 | struct ceph_mds_session *session) |
1181 | { | 1181 | { |
1182 | struct ceph_msg *msg; | 1182 | struct ceph_msg *msg; |
1183 | 1183 | ||
@@ -2693,7 +2693,7 @@ static void delayed_work(struct work_struct *work) | |||
2693 | add_cap_releases(mdsc, s, -1); | 2693 | add_cap_releases(mdsc, s, -1); |
2694 | if (s->s_state == CEPH_MDS_SESSION_OPEN || | 2694 | if (s->s_state == CEPH_MDS_SESSION_OPEN || |
2695 | s->s_state == CEPH_MDS_SESSION_HUNG) | 2695 | s->s_state == CEPH_MDS_SESSION_HUNG) |
2696 | send_cap_releases(mdsc, s); | 2696 | ceph_send_cap_releases(mdsc, s); |
2697 | mutex_unlock(&s->s_mutex); | 2697 | mutex_unlock(&s->s_mutex); |
2698 | ceph_put_mds_session(s); | 2698 | ceph_put_mds_session(s); |
2699 | 2699 | ||