Project

General

Profile

Actions

Bug #19912

closed

kcephfs: Test failure: test_trim_caps

Added by Zheng Yan almost 7 years ago. Updated almost 7 years ago.

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

http://qa-proxy.ceph.com/teuthology/teuthology-2017-05-11_05:20:03-kcephfs-kraken-testing-basic-smithi/1122976/

    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;
                }

Actions #1

Updated by Zheng Yan almost 7 years ago

  • Status changed from New to Fix Under Review
Actions #2

Updated by John Spray almost 7 years ago

  • Status changed from Fix Under Review to Resolved
Actions

Also available in: Atom PDF