FAILED: patch "[PATCH] fuse: truncate pagecache on atomic_o_trunc" failed to apply to 4.19-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 76224355db7570cbe6b6f75c8929a1558828dd55 Mon Sep 17 00:00:00 2001
From: Miklos Szeredi <[email protected]>
Date: Tue, 17 Aug 2021 21:05:16 +0200
Subject: [PATCH] fuse: truncate pagecache on atomic_o_trunc
fuse_finish_open() will be called with FUSE_NOWRITE in case of atomic O_TRUNC. This can deadlock with fuse_wait_on_page_writeback() in fuse_launder_page() triggered by invalidate_inode_pages2().
Fix by replacing invalidate_inode_pages2() in fuse_finish_open() with a truncate_pagecache() call. This makes sense regardless of FOPEN_KEEP_CACHE or fc->writeback cache, so do it unconditionally.
fs/fuse/file.c +5 -2
@@ -198,12 +198,11 @@ void fuse_finish_open(struct inode *inode, struct file *file)struct fuse_file *ff = file->private_data;struct fuse_conn *fc =get_fuse_conn (inode); -if (!(ff->open_flags &FOPEN_KEEP_CACHE )) -invalidate_inode_pages2 (inode->i_mapping);if (ff->open_flags &FOPEN_STREAM )stream_open (inode, file);else if (ff->open_flags &FOPEN_NONSEEKABLE )nonseekable_open (inode, file); +if (fc->atomic_o_trunc && (file->f_flags &O_TRUNC )) {struct fuse_inode *fi =get_fuse_inode (inode);
@@ -211,10 +210,14 @@ void fuse_finish_open(struct inode *inode, struct file *file) fi->attr_version =atomic64_inc_return (&fc->attr_version);i_size_write (inode,0 );spin_unlock (&fi->lock); +truncate_pagecache (inode,0 );fuse_invalidate_attr (inode);if (fc->writeback_cache)file_update_time (file); + }else if (!(ff->open_flags &FOPEN_KEEP_CACHE )) { +invalidate_inode_pages2 (inode->i_mapping); } +if ((file->f_mode &FMODE_WRITE ) && fc->writeback_cache)fuse_link_write_file (file); }
Quoted 6 lines · On Mon, Sep 13, 2021 at 1:32 PM <[email protected]> wrote:
The patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Hi Greg,
Attaching the backport of commit 76224355db75 ("fuse: truncate pagecache on atomic_o_trunc") to v4.19.217.
Thanks,
Miklos
From 56d08204f7da642c3c914fb5b5208bffe9debe3a Mon Sep 17 00:00:00 2001
From: Miklos Szeredi <[email protected]>
Date: Tue, 17 Aug 2021 21:05:16 +0200
Subject: [PATCH] fuse: truncate pagecache on atomic_o_trunc
fuse_finish_open() will be called with FUSE_NOWRITE in case of atomic O_TRUNC. This can deadlock with fuse_wait_on_page_writeback() in fuse_launder_page() triggered by invalidate_inode_pages2().
Fix by replacing invalidate_inode_pages2() in fuse_finish_open() with a truncate_pagecache() call. This makes sense regardless of FOPEN_KEEP_CACHE or fc->writeback cache, so do it unconditionally.
--- fs/fuse/file.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
fs/fuse/file.c +5 -2
@@ -178,12 +178,11 @@ void fuse_finish_open(struct inode *inode, struct file *file)if (ff->open_flags &FOPEN_DIRECT_IO ) file->f_op = &fuse_direct_io_file_operations; -if (!(ff->open_flags &FOPEN_KEEP_CACHE )) -invalidate_inode_pages2 (inode->i_mapping);if (ff->open_flags &FOPEN_STREAM )stream_open (inode, file);else if (ff->open_flags &FOPEN_NONSEEKABLE )nonseekable_open (inode, file); +if (fc->atomic_o_trunc && (file->f_flags &O_TRUNC )) {struct fuse_inode *fi =get_fuse_inode (inode);
@@ -191,10 +190,14 @@ void fuse_finish_open(struct inode *inode, struct file *file) fi->attr_version = ++fc->attr_version;i_size_write (inode,0 );spin_unlock (&fc->lock); +truncate_pagecache (inode,0 );fuse_invalidate_attr (inode);if (fc->writeback_cache)file_update_time (file); + }else if (!(ff->open_flags &FOPEN_KEEP_CACHE )) { +invalidate_inode_pages2 (inode->i_mapping); } +if ((file->f_mode &FMODE_WRITE ) && fc->writeback_cache)fuse_link_write_file (file); }
Signature · 1 line
2.31.1
Greg Kroah-Hartman
maintainerQuoted 8 lines · Miklos Szeredi
Quoted 6 lines · On Mon, Sep 13, 2021 at 1:32 PM <[email protected]> wrote:
The patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Quoted 4 lines
Hi Greg,
Attaching the backport of commit
76224355db75("fuse: truncate pagecache onatomic_o_trunc") to v4.19.217.
Now queued up, thanks.
greg k-h