]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iomap: Clean up __generic_write_end calling
authorChristoph Hellwig <hch@lst.de>
Tue, 30 Apr 2019 15:45:33 +0000 (08:45 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Wed, 1 May 2019 14:47:37 +0000 (07:47 -0700)
Move the call to __generic_write_end into iomap_write_end instead of
duplicating it in each of the three branches.  This requires open coding
the generic_write_end for the buffer_head case.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
fs/iomap.c

index bfb1c74b16d3ebd5c763f720a2c894d7fdd989be..9f159c39fbdcb65f73f4a865fcd3c37c1687be7f 100644 (file)
@@ -730,13 +730,11 @@ __iomap_write_end(struct inode *inode, loff_t pos, unsigned len,
         * uptodate page as a zero-length write, and force the caller to redo
         * the whole thing.
         */
-       if (unlikely(copied < len && !PageUptodate(page))) {
-               copied = 0;
-       } else {
-               iomap_set_range_uptodate(page, offset_in_page(pos), len);
-               iomap_set_page_dirty(page);
-       }
-       return __generic_write_end(inode, pos, copied, page);
+       if (unlikely(copied < len && !PageUptodate(page)))
+               return 0;
+       iomap_set_range_uptodate(page, offset_in_page(pos), len);
+       iomap_set_page_dirty(page);
+       return copied;
 }
 
 static int
@@ -753,7 +751,6 @@ iomap_write_end_inline(struct inode *inode, struct page *page,
        kunmap_atomic(addr);
 
        mark_inode_dirty(inode);
-       __generic_write_end(inode, pos, copied, page);
        return copied;
 }
 
@@ -766,12 +763,13 @@ iomap_write_end(struct inode *inode, loff_t pos, unsigned len,
        if (iomap->type == IOMAP_INLINE) {
                ret = iomap_write_end_inline(inode, page, iomap, pos, copied);
        } else if (iomap->flags & IOMAP_F_BUFFER_HEAD) {
-               ret = generic_write_end(NULL, inode->i_mapping, pos, len,
-                               copied, page, NULL);
+               ret = block_write_end(NULL, inode->i_mapping, pos, len, copied,
+                               page, NULL);
        } else {
                ret = __iomap_write_end(inode, pos, len, copied, page, iomap);
        }
 
+       ret = __generic_write_end(inode, pos, ret, page);
        if (iomap->page_done)
                iomap->page_done(inode, pos, copied, page, iomap);