summaryrefslogtreecommitdiffstats
path: root/fs/internal.h
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2016-06-21 09:23:11 +1000
committerDave Chinner <david@fromorbit.com>2016-06-21 09:23:11 +1000
commitae259a9c8593f98aa60d045df978a5482a67c53f (patch)
treea3c07fa9fb8c61475ff85f4d8812d83c287258ff /fs/internal.h
parent199a31c6d93ba9dc6f831fa1e77d9926f34f4e8a (diff)
downloadlinux-ae259a9c8593f98aa60d045df978a5482a67c53f.tar.gz
linux-ae259a9c8593f98aa60d045df978a5482a67c53f.tar.bz2
linux-ae259a9c8593f98aa60d045df978a5482a67c53f.zip
fs: introduce iomap infrastructure
Add infrastructure for multipage buffered writes. This is implemented using an main iterator that applies an actor function to a range that can be written. This infrastucture is used to implement a buffered write helper, one to zero file ranges and one to implement the ->page_mkwrite VM operations. All of them borrow a fair amount of code from fs/buffers. for now by using an internal version of __block_write_begin that gets passed an iomap and builds the corresponding buffer head. The file system is gets a set of paired ->iomap_begin and ->iomap_end calls which allow it to map/reserve a range and get a notification once the write code is finished with it. Based on earlier code from Dave Chinner. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Bob Peterson <rpeterso@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
Diffstat (limited to 'fs/internal.h')
-rw-r--r--fs/internal.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/internal.h b/fs/internal.h
index b71deeecea17..c0c6f493ab8a 100644
--- a/fs/internal.h
+++ b/fs/internal.h
@@ -11,6 +11,7 @@
struct super_block;
struct file_system_type;
+struct iomap;
struct linux_binprm;
struct path;
struct mount;
@@ -39,6 +40,8 @@ static inline int __sync_blockdev(struct block_device *bdev, int wait)
* buffer.c
*/
extern void guard_bio_eod(int rw, struct bio *bio);
+extern int __block_write_begin_int(struct page *page, loff_t pos, unsigned len,
+ get_block_t *get_block, struct iomap *iomap);
/*
* char_dev.c