diff options
author | Sage Weil <sage@newdream.net> | 2010-05-14 18:35:38 +0200 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2010-05-17 19:25:45 +0200 |
commit | 81a6cf2d30eac5d790f53cdff110892f7b18c7fe (patch) | |
tree | 9dcc1d4492b8736cda6a007a4a1c076048bd87af /fs/ceph/super.h | |
parent | ceph: fix race between aborted requests and fill_trace (diff) | |
download | linux-81a6cf2d30eac5d790f53cdff110892f7b18c7fe.tar.xz linux-81a6cf2d30eac5d790f53cdff110892f7b18c7fe.zip |
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.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/ceph/super.h b/fs/ceph/super.h index 13513b80d87f..cfe3b0834d54 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, |