fuse: Replace page without copying in fuse_writepage_in_flight()
authorKirill Tkhai <ktkhai@virtuozzo.com>
Mon, 26 Nov 2018 09:46:20 +0000 (12:46 +0300)
committerMiklos Szeredi <mszeredi@redhat.com>
Wed, 13 Feb 2019 12:15:12 +0000 (13:15 +0100)
It looks like we can optimize page replacement and avoid copying by simple
updating the request's page.

[SzM: swap with new request's tmp page to avoid use after free.]

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/fuse/file.c

index ee59599..6b6e257 100644 (file)
@@ -1789,7 +1789,7 @@ static bool fuse_writepage_in_flight(struct fuse_req *new_req,
                if (curr_index == page->index) {
                        WARN_ON(tmp->num_pages != 1);
                        WARN_ON(!test_bit(FR_PENDING, &tmp->flags));
-                       copy_highpage(tmp->pages[0], page);
+                       swap(tmp->pages[0], new_req->pages[0]);
                        break;
                }
        }