Metadata writeback cache support (LU-10938)

[LU-15499] WBC: deadlock for buffered write in parallel when test with dcp/ior Created: 29/Jan/22  Updated: 29/Jan/22

Status: Open
Project: Lustre
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Technical task Priority: Minor
Reporter: Qian Yingjin Assignee: Qian Yingjin
Resolution: Unresolved Votes: 0
Labels: None

Rank (Obsolete): 9223372036854775807

 Description   

When benchmark with IOR, we found the following deadlock:

memfs_file_write_iter()
{
    ....
    down_read(&wbci->wbci_rw_sem); // lock 1
     if (wbc_inode_data_caching(wbci)) {
                inode_lock(inode);     // lock 2
                rc = generic_write_checks(iocb, iter);
                if (rc > 0)
                        rc = __generic_file_write_iter(iocb, iter);
                inode_unlock(inode);
                 ....
    }
    up_read(&wbci->wbci_rw_sem);
    ....
}

memfs_write_begin(...)
{
    rc = memfs_write_getpage(inode, index, pagep);
        if (rc == -ENOSPC) {
                int rc2;

                // need to call inode_unlock(inode);
                up_read(&wbci->wbci_rw_sem);
                rc2 = wbc_make_data_commit(file->f_path.dentry);
                down_read(&wbci->wbci_rw_sem);
                // need to call inode_lock(inode);
                if (rc2 < 0)
                        rc = rc2;
        }



 Comments   
Comment by Gerrit Updater [ 29/Jan/22 ]

"Yingjin Qian <qian@ddn.com>" uploaded a new patch: https://review.whamcloud.com/46376
Subject: LU-15499 wbc: avoid deadlock for parallel buffered write
Project: fs/lustre-release
Branch: master
Current Patch Set: 1
Commit: 20692edcecfaa9244451592b73c96c78dbbd584e

Generated at Sat Feb 10 03:18:50 UTC 2024 using Jira 9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c.