···13091309 * checkpoint. This can only happen to quota writes which can cause13101310 * the below discard race condition.13111311 */13121312- f2fs_down_read(&sbi->node_write);13121312+ f2fs_down_read_trace(&sbi->node_write, &lc);13131313 } else if (!f2fs_trylock_op(sbi, &lc)) {13141314 goto out_free;13151315 }···1434143414351435 f2fs_put_dnode(&dn);14361436 if (quota_inode)14371437- f2fs_up_read(&sbi->node_write);14371437+ f2fs_up_read_trace(&sbi->node_write, &lc);14381438 else14391439 f2fs_unlock_op(sbi, &lc);14401440···14631463 f2fs_put_dnode(&dn);14641464out_unlock_op:14651465 if (quota_inode)14661466- f2fs_up_read(&sbi->node_write);14661466+ f2fs_up_read_trace(&sbi->node_write, &lc);14671467 else14681468 f2fs_unlock_op(sbi, &lc);14691469out_free:
+4-2
fs/f2fs/data.c
···30643064write:30653065 /* Dentry/quota blocks are controlled by checkpoint */30663066 if (S_ISDIR(inode->i_mode) || quota_inode) {30673067+ struct f2fs_lock_context lc;30683068+30673069 /*30683070 * We need to wait for node_write to avoid block allocation during30693071 * checkpoint. This can only happen to quota writes which can cause30703072 * the below discard race condition.30713073 */30723074 if (quota_inode)30733073- f2fs_down_read(&sbi->node_write);30753075+ f2fs_down_read_trace(&sbi->node_write, &lc);3074307630753077 fio.need_lock = LOCK_DONE;30763078 err = f2fs_do_write_data_page(&fio);3077307930783080 if (quota_inode)30793079- f2fs_up_read(&sbi->node_write);30813081+ f2fs_up_read_trace(&sbi->node_write, &lc);3080308230813083 goto done;30823084 }