aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ceph/super.h
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2010-05-14 09:35:38 -0700
committerSage Weil <sage@newdream.net>2010-05-17 10:25:45 -0700
commit81a6cf2d30eac5d790f53cdff110892f7b18c7fe (patch)
tree9dcc1d4492b8736cda6a007a4a1c076048bd87af /fs/ceph/super.h
parentb4556396fac5b3f063d5b8ac54dc02f7612a75e1 (diff)
downloadkernel_samsung_smdk4412-81a6cf2d30eac5d790f53cdff110892f7b18c7fe.zip
kernel_samsung_smdk4412-81a6cf2d30eac5d790f53cdff110892f7b18c7fe.tar.gz
kernel_samsung_smdk4412-81a6cf2d30eac5d790f53cdff110892f7b18c7fe.tar.bz2
ceph: invalidate affected dentry leases on aborted requests
If we abort a request, we return to caller, but the request may still complete. And if we hold the dir FILE_EXCL bit, we may not release a lease when sending a request. A simple un-tar, control-c, un-tar again will reproduce the bug (manifested as a 'Cannot open: File exists'). Ensure we invalidate affected dentry leases (as well dir I_COMPLETE) so we don't have valid (but incorrect) leases. Do the same, consistently, at other sites where I_COMPLETE is similarly cleared. Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs/ceph/super.h')
-rw-r--r--fs/ceph/super.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/ceph/super.h b/fs/ceph/super.h
index 13513b8..cfe3b08 100644
--- a/fs/ceph/super.h
+++ b/fs/ceph/super.h
@@ -871,6 +871,7 @@ extern struct dentry *ceph_finish_lookup(struct ceph_mds_request *req,
extern void ceph_dentry_lru_add(struct dentry *dn);
extern void ceph_dentry_lru_touch(struct dentry *dn);
extern void ceph_dentry_lru_del(struct dentry *dn);
+extern void ceph_invalidate_dentry_lease(struct dentry *dentry);
/*
* our d_ops vary depending on whether the inode is live,