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 --- include/linux/fs.h | 2 ++ mm/filemap.c | 1 + 2 files changed, 3 insertions(+) Index: linux-2.6.18-rc1/include/linux/fs.h =================================================================== --- linux-2.6.18-rc1.orig/include/linux/fs.h 2006-07-24 10:12:18.000000000 -0700 +++ linux-2.6.18-rc1/include/linux/fs.h 2006-07-24 10:35:51.000000000 -0700 @@ -356,6 +356,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 @@ -366,6 +367,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; Index: linux-2.6.18-rc1/mm/filemap.c =================================================================== --- linux-2.6.18-rc1.orig/mm/filemap.c 2006-07-24 10:12:20.000000000 -0700 +++ linux-2.6.18-rc1/mm/filemap.c 2006-07-24 10:36:44.000000000 -0700 @@ -2278,6 +2278,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);