Message ID | 20230118152603.28301-1-kent.overstreet@linux.dev (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] fs/aio: Use kmap_local() instead of kmap() | expand |
Hi, Kent, Kent Overstreet <kent.overstreet@linux.dev> writes: > Originally, we used kmap() instead of kmap_atomic() for reading events > out of the completion ringbuffer because we're using copy_to_user(), > which can fault. > > Now that kmap_local() is a thing, use that instead. This has already been proposed as part of a more comprehensive patch: https://lore.kernel.org/linux-fsdevel/20230109175629.9482-1-fmdefrancesco@gmail.com/ Would you be willing to review that one? Thanks! Jeff > > Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev> > Cc: Benjamin LaHaise <bcrl@kvack.org > Cc: linux-aio@kvack.org > Cc: linux-fsdevel@vger.kernel.org > --- > fs/aio.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/aio.c b/fs/aio.c > index 5b2ff20ad3..3f795ed2a2 100644 > --- a/fs/aio.c > +++ b/fs/aio.c > @@ -1246,10 +1246,10 @@ static long aio_read_events_ring(struct kioctx *ctx, > avail = min(avail, nr - ret); > avail = min_t(long, avail, AIO_EVENTS_PER_PAGE - pos); > > - ev = kmap(page); > + ev = kmap_local_page(page); > copy_ret = copy_to_user(event + ret, ev + pos, > sizeof(*ev) * avail); > - kunmap(page); > + kunmap_local(ev); > > if (unlikely(copy_ret)) { > ret = -EFAULT;
diff --git a/fs/aio.c b/fs/aio.c index 5b2ff20ad3..3f795ed2a2 100644 --- a/fs/aio.c +++ b/fs/aio.c @@ -1246,10 +1246,10 @@ static long aio_read_events_ring(struct kioctx *ctx, avail = min(avail, nr - ret); avail = min_t(long, avail, AIO_EVENTS_PER_PAGE - pos); - ev = kmap(page); + ev = kmap_local_page(page); copy_ret = copy_to_user(event + ret, ev + pos, sizeof(*ev) * avail); - kunmap(page); + kunmap_local(ev); if (unlikely(copy_ret)) { ret = -EFAULT;
Originally, we used kmap() instead of kmap_atomic() for reading events out of the completion ringbuffer because we're using copy_to_user(), which can fault. Now that kmap_local() is a thing, use that instead. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev> Cc: Benjamin LaHaise <bcrl@kvack.org Cc: linux-aio@kvack.org Cc: linux-fsdevel@vger.kernel.org --- fs/aio.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)