From: Jerome Glisse <jglisse@redhat.com>
To: Boaz Harrosh <openosd@gmail.com>
Cc: Boaz Harrosh <boaz@plexistor.com>,
Dan Williams <dan.j.williams@intel.com>,
Kent Overstreet <kent.overstreet@gmail.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
linux-fsdevel <linux-fsdevel@vger.kernel.org>,
linux-block@vger.kernel.org, Linux MM <linux-mm@kvack.org>,
John Hubbard <jhubbard@nvidia.com>, Jan Kara <jack@suse.cz>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Johannes Thumshirn <jthumshirn@suse.de>,
Christoph Hellwig <hch@lst.de>, Jens Axboe <axboe@kernel.dk>,
Ming Lei <ming.lei@redhat.com>, Jason Gunthorpe <jgg@ziepe.ca>,
Matthew Wilcox <willy@infradead.org>,
Steve French <sfrench@samba.org>,
linux-cifs@vger.kernel.org, Yan Zheng <zyan@redhat.com>,
Sage Weil <sage@redhat.com>, Ilya Dryomov <idryomov@gmail.com>,
Alex Elder <elder@kernel.or>
Subject: Re: [PATCH v1 00/15] Keep track of GUPed pages in fs and block
Date: Tue, 16 Apr 2019 19:34:03 -0400 [thread overview]
Message-ID: <20190416233402.GC22465@redhat.com> (raw)
In-Reply-To: <41e2d7e1-104b-a006-2824-015ca8c76cc8@gmail.com>
On Wed, Apr 17, 2019 at 01:09:22AM +0300, Boaz Harrosh wrote:
> On 16/04/19 22:57, Jerome Glisse wrote:
> <>
> >
> > A very long thread on this:
> >
> > https://lkml.org/lkml/2018/12/3/1128
> >
> > especialy all the reply to this first one
> >
> > There is also:
> >
> > https://lkml.org/lkml/2019/3/26/1395
> > https://lwn.net/Articles/753027/
> >
>
> OK I have re-read this patchset and a little bit of the threads above (not all)
>
> As I understand the long term plan is to keep two separate ref-counts one
> for GUP-ref and one for the regular page-state/ownership ref.
> Currently looking at page-ref we do not know if we have a GUP currently held.
> With the new plan we can (Still not sure what's the full plan with this new info)
>
> But if you make it such as the first GUP-ref also takes a page_ref and the
> last GUp-dec also does put_page. Then the all of these becomes a matter of
> matching every call to get_user_pages or iov_iter_get_pages() with a new
> put_user_pages or iov_iter_put_pages().
So sorry forgot to answer that part. So idea is to do:
GUP() {
...
- page_ref_inc(page);
+ page_ref_add(page, GUP_BIAS);
...
}
with GUP_BIAS = 1024 or something big but not too big to avoid risk of
overflow by GUP. Then put_user_page() just ref_sub instead of ref_dec
the same amount.
We can have false GUP positive if a page is map so many time or reference
so many time that its refcount reach the GUP_BIAS value but considering
such page as GUPed should not be too harmful (not more harmful than what
we do with GUPed page).
So we want to call put_user_page() for GUPed page and only GUPed page so
that we keep the reference count properly balance.
Cheers,
Jérôme
WARNING: multiple messages have this Message-ID (diff)
From: Jerome Glisse <jglisse@redhat.com>
To: Boaz Harrosh <openosd@gmail.com>
Cc: "Boaz Harrosh" <boaz@plexistor.com>,
"Dan Williams" <dan.j.williams@intel.com>,
"Kent Overstreet" <kent.overstreet@gmail.com>,
"Linux Kernel Mailing List" <linux-kernel@vger.kernel.org>,
linux-fsdevel <linux-fsdevel@vger.kernel.org>,
linux-block@vger.kernel.org, "Linux MM" <linux-mm@kvack.org>,
"John Hubbard" <jhubbard@nvidia.com>, "Jan Kara" <jack@suse.cz>,
"Alexander Viro" <viro@zeniv.linux.org.uk>,
"Johannes Thumshirn" <jthumshirn@suse.de>,
"Christoph Hellwig" <hch@lst.de>, "Jens Axboe" <axboe@kernel.dk>,
"Ming Lei" <ming.lei@redhat.com>,
"Jason Gunthorpe" <jgg@ziepe.ca>,
"Matthew Wilcox" <willy@infradead.org>,
"Steve French" <sfrench@samba.org>,
linux-cifs@vger.kernel.org, "Yan Zheng" <zyan@redhat.com>,
"Sage Weil" <sage@redhat.com>,
"Ilya Dryomov" <idryomov@gmail.com>,
"Alex Elder" <elder@kernel.org>,
ceph-devel@vger.kernel.org,
"Eric Van Hensbergen" <ericvh@gmail.com>,
"Latchesar Ionkov" <lucho@ionkov.net>,
"Mike Marshall" <hubcap@omnibond.com>,
"Martin Brandenburg" <martin@omnibond.com>,
"Dominique Martinet" <asmadeus@codewreck.org>,
v9fs-developer@lists.sourceforge.net, "Coly Li" <colyli@suse.de>,
linux-bcache@vger.kernel.org,
"Ernesto A. Fernández" <ernesto.mnd.fernandez@gmail.com>
Subject: Re: [PATCH v1 00/15] Keep track of GUPed pages in fs and block
Date: Tue, 16 Apr 2019 19:34:03 -0400 [thread overview]
Message-ID: <20190416233402.GC22465@redhat.com> (raw)
In-Reply-To: <41e2d7e1-104b-a006-2824-015ca8c76cc8@gmail.com>
On Wed, Apr 17, 2019 at 01:09:22AM +0300, Boaz Harrosh wrote:
> On 16/04/19 22:57, Jerome Glisse wrote:
> <>
> >
> > A very long thread on this:
> >
> > https://lkml.org/lkml/2018/12/3/1128
> >
> > especialy all the reply to this first one
> >
> > There is also:
> >
> > https://lkml.org/lkml/2019/3/26/1395
> > https://lwn.net/Articles/753027/
> >
>
> OK I have re-read this patchset and a little bit of the threads above (not all)
>
> As I understand the long term plan is to keep two separate ref-counts one
> for GUP-ref and one for the regular page-state/ownership ref.
> Currently looking at page-ref we do not know if we have a GUP currently held.
> With the new plan we can (Still not sure what's the full plan with this new info)
>
> But if you make it such as the first GUP-ref also takes a page_ref and the
> last GUp-dec also does put_page. Then the all of these becomes a matter of
> matching every call to get_user_pages or iov_iter_get_pages() with a new
> put_user_pages or iov_iter_put_pages().
So sorry forgot to answer that part. So idea is to do:
GUP() {
...
- page_ref_inc(page);
+ page_ref_add(page, GUP_BIAS);
...
}
with GUP_BIAS = 1024 or something big but not too big to avoid risk of
overflow by GUP. Then put_user_page() just ref_sub instead of ref_dec
the same amount.
We can have false GUP positive if a page is map so many time or reference
so many time that its refcount reach the GUP_BIAS value but considering
such page as GUPed should not be too harmful (not more harmful than what
we do with GUPed page).
So we want to call put_user_page() for GUPed page and only GUPed page so
that we keep the reference count properly balance.
Cheers,
Jérôme
next prev parent reply other threads:[~2019-04-16 23:34 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-11 21:08 [PATCH v1 00/15] Keep track of GUPed pages in fs and block jglisse
2019-04-11 21:08 ` jglisse
2019-04-11 21:08 ` [PATCH v1 01/15] fs/direct-io: fix trailing whitespace issues jglisse
2019-04-11 21:08 ` [PATCH v1 02/15] iov_iter: add helper to test if an iter would use GUP jglisse
2019-04-11 21:08 ` [PATCH v1 03/15] block: introduce bvec_page()/bvec_set_page() to get/set bio_vec.bv_page jglisse
2019-04-11 21:08 ` [PATCH v1 04/15] block: introduce BIO_VEC_INIT() macro to initialize bio_vec structure jglisse
2019-04-11 21:08 ` jglisse
2019-04-11 21:08 ` [PATCH v1 05/15] block: replace all bio_vec->bv_page by bvec_page()/bvec_set_page() jglisse
2019-04-11 21:08 ` [PATCH v1 06/15] block: convert bio_vec.bv_page to bv_pfn to store pfn and not page jglisse
2019-04-11 21:08 ` [PATCH v1 07/15] block: add bvec_put_page_dirty*() to replace put_page(bvec_page()) jglisse
2019-04-11 21:08 ` [PATCH v1 08/15] block: use bvec_put_page() instead of put_page(bvec_page()) jglisse
2019-04-11 21:08 ` [PATCH v1 09/15] block: bvec_put_page_dirty* instead of set_page_dirty* and bvec_put_page jglisse
2019-04-11 21:08 ` [PATCH v1 10/15] block: add gup flag to bio_add_page()/bio_add_pc_page()/__bio_add_page() jglisse
2019-04-15 14:59 ` Jan Kara
2019-04-15 15:24 ` Jerome Glisse
2019-04-16 16:46 ` Jan Kara
2019-04-16 16:54 ` Dan Williams
2019-04-16 17:07 ` Jerome Glisse
2019-04-16 0:22 ` Jerome Glisse
2019-04-16 16:52 ` Jan Kara
2019-04-16 18:32 ` Jerome Glisse
2019-04-11 21:08 ` [PATCH v1 11/15] block: make sure bio_add_page*() knows page that are coming from GUP jglisse
2019-04-11 21:08 ` [PATCH v1 12/15] fs/direct-io: keep track of wether a page is coming from GUP or not jglisse
2019-04-11 23:14 ` Dave Chinner
2019-04-12 0:08 ` Jerome Glisse
2019-04-11 21:08 ` [PATCH v1 13/15] fs/splice: use put_user_page() when appropriate jglisse
2019-04-11 21:08 ` [PATCH v1 14/15] fs: use bvec_set_gup_page() where appropriate jglisse
2019-04-11 21:08 ` [PATCH v1 15/15] ceph: use put_user_pages() instead of ceph_put_page_vector() jglisse
2019-04-15 7:46 ` Yan, Zheng
2019-04-15 15:11 ` Jerome Glisse
2019-04-16 0:00 ` [PATCH v1 00/15] Keep track of GUPed pages in fs and block Dave Chinner
2019-04-16 0:00 ` Dave Chinner
2019-04-16 18:35 ` Boaz Harrosh
2019-04-16 18:47 ` Jerome Glisse
2019-04-16 18:47 ` Jerome Glisse
2019-04-16 19:14 ` Boaz Harrosh
2019-04-16 18:59 ` Kent Overstreet
2019-04-16 18:59 ` Kent Overstreet
2019-04-16 19:12 ` Dan Williams
2019-04-16 19:12 ` Dan Williams
2019-04-16 19:28 ` Boaz Harrosh
2019-04-16 19:57 ` Jerome Glisse
2019-04-16 19:57 ` Jerome Glisse
2019-04-16 22:09 ` Boaz Harrosh
2019-04-16 23:16 ` Jerome Glisse
2019-04-16 23:16 ` Jerome Glisse
2019-04-17 1:11 ` Boaz Harrosh
2019-04-17 2:03 ` Jerome Glisse
2019-04-17 2:03 ` Jerome Glisse
2019-04-17 21:19 ` Jerome Glisse
2019-04-17 21:19 ` Jerome Glisse
2019-04-16 23:34 ` Jerome Glisse [this message]
2019-04-16 23:34 ` Jerome Glisse
2019-04-17 21:54 ` Dan Williams
2019-04-17 21:54 ` Dan Williams
2019-04-18 15:56 ` Boaz Harrosh
2019-04-16 19:49 ` Jerome Glisse
2019-04-16 19:49 ` Jerome Glisse
2019-04-17 21:53 ` Dan Williams
2019-04-17 21:53 ` Dan Williams
2019-04-17 22:28 ` Jerome Glisse
2019-04-17 22:28 ` Jerome Glisse
2019-04-17 23:32 ` Dan Williams
2019-04-17 23:32 ` Dan Williams
2019-04-18 10:42 ` Jan Kara
2019-04-18 10:42 ` Jan Kara
2019-04-18 14:27 ` Jerome Glisse
2019-04-18 14:27 ` Jerome Glisse
2019-04-18 15:30 ` Jan Kara
2019-04-18 15:30 ` Jan Kara
2019-04-18 15:36 ` Jerome Glisse
2019-04-18 15:36 ` Jerome Glisse
2019-04-18 18:03 ` Dan Williams
2019-04-18 18:03 ` Dan Williams
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=20190416233402.GC22465@redhat.com \
--to=jglisse@redhat.com \
--cc=axboe@kernel.dk \
--cc=boaz@plexistor.com \
--cc=dan.j.williams@intel.com \
--cc=elder@kernel.or \
--cc=hch@lst.de \
--cc=idryomov@gmail.com \
--cc=jack@suse.cz \
--cc=jgg@ziepe.ca \
--cc=jhubbard@nvidia.com \
--cc=jthumshirn@suse.de \
--cc=kent.overstreet@gmail.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-cifs@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ming.lei@redhat.com \
--cc=openosd@gmail.com \
--cc=sage@redhat.com \
--cc=sfrench@samba.org \
--cc=viro@zeniv.linux.org.uk \
--cc=willy@infradead.org \
--cc=zyan@redhat.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.