Metadata writeback cache support
(LU-10938)
|
|
| 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 filebench oltp.f workload, the writer hanged. After investigated, we found the following dead lock in WBC code: static ssize_t memfs_file_write_iter(struct kiocb *iocb, struct iov_iter *iter) { down_read(&wbci->wbci_rw_sem); repeat: if (wbc_inode_data_caching(wbci)) { rc = generic_file_write_iter(iocb, iter); if (rc == -ENOSPC) GOTO(repeat, rc); } else { rc = ll_i2sbi(inode)->ll_fop->write_iter(iocb, iter); } up_read(&wbci->wbci_rw_sem); .... } generic_file_write_iter() ->generic_write_sync(): static inline ssize_t generic_write_sync(struct kiocb *iocb, ssize_t count) { if (iocb->ki_flags & IOCB_DSYNC) { int ret = vfs_fsync_range(iocb->ki_filp, iocb->ki_pos - count, iocb->ki_pos - 1, (iocb->ki_flags & IOCB_SYNC) ? 0 : 1); ... static int memfs_fsync(struct file *file, loff_t start, loff_t end, int datasync) { if (S_ISREG(inode->i_mode)) { down_write(&wbci->wbci_rw_sem); //** rc = wbcfs_commit_cache_pages(inode); up_write(&wbci->wbci_rw_sem); //** } ... } |
| Comments |
| Comment by Gerrit Updater [ 12/Jan/22 ] |
|
"Yingjin Qian <qian@ddn.com>" uploaded a new patch: https://review.whamcloud.com/46059 |