diff options
author | Kent Overstreet <koverstreet@google.com> | 2013-03-02 15:25:56 +1100 |
---|---|---|
committer | Stephen Rothwell <sfr@canb.auug.org.au> | 2013-03-07 14:27:33 +1100 |
commit | c1961305b3c33a90d36b63e261dae68dbe6d6b6e (patch) | |
tree | 4b030a1b23ef33e9903798f01f5f060e81875f5b | |
parent | 40320f67b5e8b541f704ce155e701e9f60b0ca77 (diff) |
aio: fix aio_read_events_ring() types
Signed-off-by: Kent Overstreet <koverstreet@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-rw-r--r-- | fs/aio.c | 24 |
1 files changed, 13 insertions, 11 deletions
@@ -852,12 +852,13 @@ EXPORT_SYMBOL(aio_complete_batch); * Pull an event off of the ioctx's event ring. Returns the number of * events fetched */ -static int aio_read_events_ring(struct kioctx *ctx, - struct io_event __user *event, long nr) +static long aio_read_events_ring(struct kioctx *ctx, + struct io_event __user *event, long nr) { struct aio_ring *ring; unsigned head, pos; - int ret = 0, copy_ret; + long ret = 0; + int copy_ret; if (!mutex_trylock(&ctx->ring_lock)) { __set_current_state(TASK_RUNNING); @@ -876,23 +877,24 @@ static int aio_read_events_ring(struct kioctx *ctx, __set_current_state(TASK_RUNNING); while (ret < nr) { - unsigned i = (head < ctx->shadow_tail ? ctx->shadow_tail : ctx->nr) - head; + long avail = (head < ctx->shadow_tail + ? ctx->shadow_tail : ctx->nr) - head; struct io_event *ev; struct page *page; if (head == ctx->shadow_tail) break; - i = min_t(int, i, nr - ret); - i = min_t(int, i, AIO_EVENTS_PER_PAGE - - ((head + AIO_EVENTS_OFFSET) % AIO_EVENTS_PER_PAGE)); + avail = min(avail, nr - ret); + avail = min_t(long, avail, AIO_EVENTS_PER_PAGE - + ((head + AIO_EVENTS_OFFSET) % AIO_EVENTS_PER_PAGE)); pos = head + AIO_EVENTS_OFFSET; page = ctx->ring_pages[pos / AIO_EVENTS_PER_PAGE]; pos %= AIO_EVENTS_PER_PAGE; ev = kmap(page); - copy_ret = copy_to_user(event + ret, ev + pos, sizeof(*ev) * i); + copy_ret = copy_to_user(event + ret, ev + pos, sizeof(*ev) * avail); kunmap(page); if (unlikely(copy_ret)) { @@ -900,8 +902,8 @@ static int aio_read_events_ring(struct kioctx *ctx, goto out; } - ret += i; - head += i; + ret += avail; + head += avail; head %= ctx->nr; } @@ -910,7 +912,7 @@ static int aio_read_events_ring(struct kioctx *ctx, kunmap_atomic(ring); flush_dcache_page(ctx->ring_pages[0]); - pr_debug("%d h%u t%u\n", ret, head, ctx->shadow_tail); + pr_debug("%li h%u t%u\n", ret, head, ctx->shadow_tail); put_reqs_available(ctx, ret); out: |