linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Miklos Szeredi <miklos@szeredi.hu>
To: Kirill Tkhai <ktkhai@virtuozzo.com>
Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/2] fuse: Replace page without copying in fuse_writepage_in_flight()
Date: Tue, 15 Jan 2019 17:36:18 +0100	[thread overview]
Message-ID: <CAJfpeguXy_Eebok9z_FCGvjGM8_qHHyTqsTMFeaJbmrW12kqYA@mail.gmail.com> (raw)
In-Reply-To: <30c6d750-01b1-fb7e-eb80-0f60f242974a@virtuozzo.com>

On Tue, Jan 15, 2019 at 5:14 PM Kirill Tkhai <ktkhai@virtuozzo.com> wrote:
>
> On 15.01.2019 18:39, Miklos Szeredi wrote:
> > On Mon, Nov 26, 2018 at 10:46 AM Kirill Tkhai <ktkhai@virtuozzo.com> wrote:
> >>
> >> It looks like we can optimize old_req page replacement
> >> and avoid copying by simple updating the request's page.
> >>
> >> Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
> >> ---
> >>  fs/fuse/file.c |    2 +-
> >>  1 file changed, 1 insertion(+), 1 deletion(-)
> >>
> >> diff --git a/fs/fuse/file.c b/fs/fuse/file.c
> >> index c6650c68b31a..83b54b082c86 100644
> >> --- a/fs/fuse/file.c
> >> +++ b/fs/fuse/file.c
> >> @@ -1778,7 +1778,7 @@ static bool fuse_writepage_in_flight(struct fuse_req *new_req,
> >>         if (old_req->num_pages == 1 && old_req != first_req) {
> >>                 struct backing_dev_info *bdi = inode_to_bdi(page->mapping->host);
> >>
> >> -               copy_highpage(old_req->pages[0], page);
> >> +               swap(old_req->pages[0], page);
> >
> > This would mess up refcounting for all pages involved.   need to swap
> > with the temp page in new_req.    Fixed version in #for-next.
>
> You are sure, page is just a simple pointer, not struct **page.
> Then we would have had to change fuse_writepage_in_flight() to use ** pointer.

Using a struct page** would still have been broken, not because of
refcounting, but because of putting the wrong page into the request
(we do the temporary copy to avoid some issues with adding the page
cache page directly into the request)

Thanks,
Miklos

  reply	other threads:[~2019-01-15 16:36 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-26  9:46 [PATCH 1/2] fuse: Fix race in fuse_writepage_in_flight() Kirill Tkhai
2018-11-26  9:46 ` [PATCH 2/2] fuse: Replace page without copying " Kirill Tkhai
2019-01-15 15:39   ` Miklos Szeredi
2019-01-15 16:14     ` Kirill Tkhai
2019-01-15 16:36       ` Miklos Szeredi [this message]
2019-01-15 16:38         ` Kirill Tkhai
2019-01-10 10:48 ` [PATCH 1/2] fuse: Fix race " Kirill Tkhai
2019-01-10 11:00   ` Miklos Szeredi
2019-01-10 11:03     ` Kirill Tkhai
2019-01-15 15:37       ` Miklos Szeredi
2019-01-15 15:55         ` Kirill Tkhai
2019-01-15 16:03           ` Miklos Szeredi
2019-01-15 16:05             ` Kirill Tkhai

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAJfpeguXy_Eebok9z_FCGvjGM8_qHHyTqsTMFeaJbmrW12kqYA@mail.gmail.com \
    --to=miklos@szeredi.hu \
    --cc=ktkhai@virtuozzo.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).