diff options
author | Mark Brown <broonie@kernel.org> | 2019-04-19 12:37:22 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2019-04-19 12:37:22 +0100 |
commit | 8fd8f8d65bf56aaa80c7ae5eaf26afd586139683 (patch) | |
tree | 8f9fd52a208936407fcba87b85c4445b38ee5eaa /fs/f2fs | |
parent | bf72d1505bc41ffd6b8d052e6da2f8fc535ed45a (diff) | |
parent | 58b454ebf81e5ae9391957d99cf89566d9eec1b1 (diff) |
Merge tag 'v4.14.112' into linux-linaro-lsk-v4.14linux-linaro-lsk-v4.14
This is the 4.14.112 stable release
Diffstat (limited to 'fs/f2fs')
-rw-r--r-- | fs/f2fs/inline.c | 8 | ||||
-rw-r--r-- | fs/f2fs/trace.c | 8 |
2 files changed, 14 insertions, 2 deletions
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c index 888a9dc13677..506e365cf903 100644 --- a/fs/f2fs/inline.c +++ b/fs/f2fs/inline.c @@ -656,6 +656,12 @@ int f2fs_read_inline_dir(struct file *file, struct dir_context *ctx, if (IS_ERR(ipage)) return PTR_ERR(ipage); + /* + * f2fs_readdir was protected by inode.i_rwsem, it is safe to access + * ipage without page's lock held. + */ + unlock_page(ipage); + inline_dentry = inline_data_addr(inode, ipage); make_dentry_ptr_inline(inode, &d, inline_dentry); @@ -664,7 +670,7 @@ int f2fs_read_inline_dir(struct file *file, struct dir_context *ctx, if (!err) ctx->pos = d.max; - f2fs_put_page(ipage, 1); + f2fs_put_page(ipage, 0); return err < 0 ? err : 0; } diff --git a/fs/f2fs/trace.c b/fs/f2fs/trace.c index bccbbf2616d2..8ac1851a21c0 100644 --- a/fs/f2fs/trace.c +++ b/fs/f2fs/trace.c @@ -61,6 +61,7 @@ void f2fs_trace_pid(struct page *page) set_page_private(page, (unsigned long)pid); +retry: if (radix_tree_preload(GFP_NOFS)) return; @@ -71,7 +72,12 @@ void f2fs_trace_pid(struct page *page) if (p) radix_tree_delete(&pids, pid); - f2fs_radix_tree_insert(&pids, pid, current); + if (radix_tree_insert(&pids, pid, current)) { + spin_unlock(&pids_lock); + radix_tree_preload_end(); + cond_resched(); + goto retry; + } trace_printk("%3x:%3x %4x %-16s\n", MAJOR(inode->i_sb->s_dev), MINOR(inode->i_sb->s_dev), |