diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c index adffa0e3b607..8bde348c2ca2 100644 --- a/fs/fuse/dev.c +++ b/fs/fuse/dev.c @@ -1151,32 +1151,32 @@ static int fuse_try_move_folio(struct fuse_copy_state *cs, struct folio **foliop if (cs->len != folio_size(oldfolio)) goto out_fallback; - if (!pipe_buf_try_steal(cs->pipe, buf)) - goto out_fallback; - newfolio = page_folio(buf->page); - folio_clear_uptodate(newfolio); - folio_clear_mappedtodisk(newfolio); - if (folio_test_large(newfolio)) - goto out_fallback_unlock; - - if (fuse_check_folio(newfolio) != 0) - goto out_fallback_unlock; + goto out_fallback; /* * This is a new and locked page, it shouldn't be mapped or * have any special flags on it */ if (WARN_ON(folio_mapped(oldfolio))) - goto out_fallback_unlock; + goto out_fallback; if (WARN_ON(folio_has_private(oldfolio))) - goto out_fallback_unlock; + goto out_fallback; if (WARN_ON(folio_test_dirty(oldfolio) || folio_test_writeback(oldfolio))) - goto out_fallback_unlock; + goto out_fallback; if (WARN_ON(folio_test_mlocked(oldfolio))) + goto out_fallback; + + if (!pipe_buf_try_steal(cs->pipe, buf)) + goto out_fallback; + + folio_clear_uptodate(newfolio); + folio_clear_mappedtodisk(newfolio); + + if (fuse_check_folio(newfolio) != 0) goto out_fallback_unlock; err = lock_request(cs->req);