]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
iomap: add a page_done callback
authorChristoph Hellwig <hch@lst.de>
Tue, 19 Jun 2018 22:10:56 +0000 (15:10 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Tue, 19 Jun 2018 22:10:56 +0000 (15:10 -0700)
This will be used by gfs2 to attach data to transactions for the journaled
data mode.  But the concept is generic enough that we might be able to
use it for other purposes like encryption/integrity post-processing in the
future.

Based on a patch from Andreas Gruenbacher.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
fs/iomap.c
include/linux/iomap.h

index 4aecd7c5dbd8b8b9b3f0326b3571f986ef3cef75..a1f71e64ea4995c20bfe02de140c0740af94f977 100644 (file)
@@ -201,6 +201,9 @@ iomap_write_end(struct inode *inode, loff_t pos, unsigned len,
                                copied, page, NULL);
        }
 
+       if (iomap->page_done)
+               iomap->page_done(inode, pos, copied, page, iomap);
+
        if (ret < len)
                iomap_write_failed(inode, pos, len);
        return ret;
index 10d6cff7f69a39dac09b533d8390dbdfbcb69816..45f43865b0f0494512073973bb50c76c082ee837 100644 (file)
@@ -9,6 +9,7 @@ struct fiemap_extent_info;
 struct inode;
 struct iov_iter;
 struct kiocb;
+struct page;
 struct vm_area_struct;
 struct vm_fault;
 
@@ -56,6 +57,14 @@ struct iomap {
        struct block_device     *bdev;  /* block device for I/O */
        struct dax_device       *dax_dev; /* dax_dev for dax operations */
        void                    *inline_data;
+
+       /*
+        * Called when finished processing a page in the mapping returned in
+        * this iomap.  At least for now this is only supported in the buffered
+        * write path.
+        */
+       void (*page_done)(struct inode *inode, loff_t pos, unsigned copied,
+                       struct page *page, struct iomap *iomap);
 };
 
 /*