From: Badari Pulavarty Pass remaining size of this IO to batch_write(). This way filesystems could choose to allocate for the entire IO, instead of current buffer size. I would like to use this for setting ext3 reservation window or allocating entire extent (ext4). Signed-off-by: Badari Pulavarty Cc: Vladimir Saveliev Cc: Christoph Hellwig Cc: Hans Reiser Cc: Miklos Szeredi Cc: Nathan Scott Cc: Steven Whitehouse Cc: Mark Fasheh Signed-off-by: Andrew Morton --- include/linux/fs.h | 2 ++ mm/filemap.c | 1 + 2 files changed, 3 insertions(+) diff -puN include/linux/fs.h~pass-io-size-to-batch_write-address-space-operation include/linux/fs.h --- a/include/linux/fs.h~pass-io-size-to-batch_write-address-space-operation +++ a/include/linux/fs.h @@ -396,6 +396,7 @@ struct writeback_control; * struct write_descriptor - set of write arguments * @pos: offset from the start of the file to write to * @count: number of bytes to write + * @iosize: remaining number of bytes in the IO * @buf: pointer to data to be written * @lru_pvec: multipage container to batch adding pages to LRU list * @cached_page: allocated but not used on previous call @@ -406,6 +407,7 @@ struct writeback_control; struct write_descriptor { loff_t pos; size_t count; + size_t iosize; char __user *buf; struct page *cached_page; struct pagevec *lru_pvec; diff -puN mm/filemap.c~pass-io-size-to-batch_write-address-space-operation mm/filemap.c --- a/mm/filemap.c~pass-io-size-to-batch_write-address-space-operation +++ a/mm/filemap.c @@ -2224,6 +2224,7 @@ generic_file_buffered_write(struct kiocb do { /* do not walk over current segment */ desc.buf = cur_iov->iov_base + iov_base; + desc.iosize = count; desc.count = min(count, cur_iov->iov_len - iov_base); if (desc.count > 0) status = (*batch_write)(file, &desc, &copied); _