From 0b2052c119b0e26f20eb4b049edc8d626f485bc2 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Fri, 7 Dec 2012 16:48:39 -0800 Subject: [PATCH] --- yaml --- r: 336255 b: refs/heads/master c: 684c9aaebbb0ea3a9954d605d4908e650659e7db h: refs/heads/master i: 336253: f5dec8bb762b5fdafa41646a08470b147897cbe7 336251: 3b4272f5466618fbbbff465cfc12c840611a5ea3 336247: 60f4af10eb27adf0868d05f267fa00cc882dddba 336239: 19ea42de911926546f8c6ab15d4657d2e9bb249e 336223: 70798649a1db878183b772b50f4cf8a830823dfa 336191: 9c922474cff613544a6d029b7b7c1e79e4876a70 336127: 1115b21ead35f180bc63879c3855ad05f04737bc v: v3 --- [refs] | 2 +- trunk/fs/block_dev.c | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index f6f8d4fb96fd..225177bf52a5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1b3c393cd43f22ead8a6a2f839efc6df8ebd7465 +refs/heads/master: 684c9aaebbb0ea3a9954d605d4908e650659e7db diff --git a/trunk/fs/block_dev.c b/trunk/fs/block_dev.c index a1e09b4fe1ba..ab3a456f6650 100644 --- a/trunk/fs/block_dev.c +++ b/trunk/fs/block_dev.c @@ -1544,6 +1544,22 @@ ssize_t blkdev_aio_write(struct kiocb *iocb, const struct iovec *iov, } EXPORT_SYMBOL_GPL(blkdev_aio_write); +static ssize_t blkdev_aio_read(struct kiocb *iocb, const struct iovec *iov, + unsigned long nr_segs, loff_t pos) +{ + struct file *file = iocb->ki_filp; + struct inode *bd_inode = file->f_mapping->host; + loff_t size = i_size_read(bd_inode); + + if (pos >= size) + return 0; + + size -= pos; + if (size < INT_MAX) + nr_segs = iov_shorten((struct iovec *)iov, nr_segs, size); + return generic_file_aio_read(iocb, iov, nr_segs, pos); +} + /* * Try to release a page associated with block device when the system * is under memory pressure. @@ -1574,7 +1590,7 @@ const struct file_operations def_blk_fops = { .llseek = block_llseek, .read = do_sync_read, .write = do_sync_write, - .aio_read = generic_file_aio_read, + .aio_read = blkdev_aio_read, .aio_write = blkdev_aio_write, .mmap = generic_file_mmap, .fsync = blkdev_fsync,