Actions
Bug #19912
closedkcephfs: Test failure: test_trim_caps
Status:
Resolved
Priority:
Normal
Assignee:
-
Category:
-
Target version:
-
% Done:
0%
Source:
Tags:
Backport:
Regression:
No
Severity:
3 - minor
Reviewed:
Affected Versions:
ceph-qa-suite:
Component(FS):
Labels (FS):
Pull request ID:
Crash signature (v1):
Crash signature (v2):
Description
def test_trim_caps(self): # Trim capability when reconnecting MDS # =================================== count = 500 # Create lots of files for i in range(count): self.mount_a.run_shell(["touch", "f{0}".format(i)]) # Populate mount_b's cache self.mount_b.run_shell(["ls"]) client_id = self.mount_b.get_global_id() num_caps = self._session_num_caps(client_id) self.assertGreaterEqual(num_caps, count)
the kernel client releases caps immediately after receiving the readdir reply. The reason inode gets released immediately is that linking the inode to dentry causes deadlock. (d_splice_alias() calls security_d_instantiate(), which calls calls getxattr(). deadlock happens if we send request inside the dispatch thread)
in ceph_readdir_prepopulate()
if (d_really_is_negative(dn)) { struct dentry *realdn; if (ceph_security_xattr_deadlock(in)) { dout(" skip splicing dn %p to inode %p" " (security xattr deadlock)\n", dn, in); iput(in); skipped++; goto next_item; } realdn = splice_dentry(dn, in); if (IS_ERR(realdn)) { err = PTR_ERR(realdn); d_drop(dn); dn = NULL; goto next_item; } dn = realdn; }
Updated by Zheng Yan almost 7 years ago
- Status changed from New to Fix Under Review
Updated by John Spray almost 7 years ago
- Status changed from Fix Under Review to Resolved
Actions