mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
f2fs: quota: do not use GFP_NOFS in f2fs_quota_read()
Commit02117b8ae9("f2fs: Set GF_NOFS in read_cache_page_gfp while doing f2fs_quota_read") adds GFP_NOFS in f2fs_quota_read() to avoid below deadlock: - do_sys_open - vfs_open - dquot_file_open - dquot_initialize - dqget - dquot_acquire : locks &dqopt->dqio_mutex (VFS Quota Mutex) - qtree_read_dquot - f2fs_quota_read - read_mapping_page (GFP_KERNEL / allows GFP_FS) - __alloc_pages_nodemask - try_to_free_pages (Direct Reclaim) - prune_icache_sb - evict - f2fs_evict_inode - dquot_drop - dqput - dquot_commit : tries to lock &dqopt->dqio_mutex again ==> DEADLOCK (waiting for itself) As Jan Kara mentioned, quota system has fixed this issue w/ commit537e11cdc7("quota: Prevent memory allocation recursion while holding dq_lock"), so this GFP_NOFS flag should be relic, let's use GFP_KERNEL instead. Cc: Jan Kara <jack@suse.cz> Cc: Matthew Wilcox <willy@infradead.org> Signed-off-by: Chao Yu <chao@kernel.org> Reviewed-by: Jan Kara <jack@suse.cz> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
35e5554ec1
commit
b41d9ff965
|
|
@ -3168,7 +3168,7 @@ static ssize_t f2fs_quota_read(struct super_block *sb, int type, char *data,
|
|||
|
||||
repeat:
|
||||
folio = mapping_read_folio_gfp(mapping, off >> PAGE_SHIFT,
|
||||
GFP_NOFS);
|
||||
GFP_KERNEL);
|
||||
if (IS_ERR(folio)) {
|
||||
if (PTR_ERR(folio) == -ENOMEM) {
|
||||
memalloc_retry_wait(GFP_NOFS);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user