Commit 925c9437 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'fuse-fixes-5.16-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse

Pull fuse fix from Miklos Szeredi:
 "Fix a regression caused by a bugfix in the previous release. The
  symptom is a VM_BUG_ON triggered from splice to the fuse device.

  Unfortunately the original bugfix was already backported to a number
  of stable releases, so this fix-fix will need to be backported as
  well"

* tag 'fuse-fixes-5.16-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse:
  fuse: release pipe buf after last use
parents 7e635452 47344172
...@@ -847,17 +847,17 @@ static int fuse_try_move_page(struct fuse_copy_state *cs, struct page **pagep) ...@@ -847,17 +847,17 @@ static int fuse_try_move_page(struct fuse_copy_state *cs, struct page **pagep)
replace_page_cache_page(oldpage, newpage); replace_page_cache_page(oldpage, newpage);
get_page(newpage);
if (!(buf->flags & PIPE_BUF_FLAG_LRU))
lru_cache_add(newpage);
/* /*
* Release while we have extra ref on stolen page. Otherwise * Release while we have extra ref on stolen page. Otherwise
* anon_pipe_buf_release() might think the page can be reused. * anon_pipe_buf_release() might think the page can be reused.
*/ */
pipe_buf_release(cs->pipe, buf); pipe_buf_release(cs->pipe, buf);
get_page(newpage);
if (!(buf->flags & PIPE_BUF_FLAG_LRU))
lru_cache_add(newpage);
err = 0; err = 0;
spin_lock(&cs->req->waitq.lock); spin_lock(&cs->req->waitq.lock);
if (test_bit(FR_ABORTED, &cs->req->flags)) if (test_bit(FR_ABORTED, &cs->req->flags))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment