iomap: iomap_read_inline_data cleanup
authorAndreas Gruenbacher <agruenba@redhat.com>
Wed, 24 Nov 2021 18:15:47 +0000 (10:15 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Wed, 24 Nov 2021 18:15:47 +0000 (10:15 -0800)
Change iomap_read_inline_data to return 0 or an error code; this
simplifies the callers.  Add a description.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
[djwong: document the return value of iomap_read_inline_data explicitly]
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
fs/iomap/buffered-io.c

index fe10d8a30f6bdff13e966c2c42497403c06b1269..71a36ae120ee8a2312a8ee9f85d14f6e1a0079fc 100644 (file)
@@ -205,7 +205,16 @@ struct iomap_readpage_ctx {
        struct readahead_control *rac;
 };
 
-static loff_t iomap_read_inline_data(const struct iomap_iter *iter,
+/**
+ * iomap_read_inline_data - copy inline data into the page cache
+ * @iter: iteration structure
+ * @page: page to copy to
+ *
+ * Copy the inline data in @iter into @page and zero out the rest of the page.
+ * Only a single IOMAP_INLINE extent is allowed at the end of each file.
+ * Returns zero for success to complete the read, or the usual negative errno.
+ */
+static int iomap_read_inline_data(const struct iomap_iter *iter,
                struct page *page)
 {
        const struct iomap *iomap = iomap_iter_srcmap(iter);
@@ -214,7 +223,7 @@ static loff_t iomap_read_inline_data(const struct iomap_iter *iter,
        void *addr;
 
        if (PageUptodate(page))
-               return PAGE_SIZE - poff;
+               return 0;
 
        if (WARN_ON_ONCE(size > PAGE_SIZE - poff))
                return -EIO;
@@ -231,7 +240,7 @@ static loff_t iomap_read_inline_data(const struct iomap_iter *iter,
        memset(addr + size, 0, PAGE_SIZE - poff - size);
        kunmap_local(addr);
        iomap_set_range_uptodate(page, poff, PAGE_SIZE - poff);
-       return PAGE_SIZE - poff;
+       return 0;
 }
 
 static inline bool iomap_block_needs_zeroing(const struct iomap_iter *iter,
@@ -256,13 +265,8 @@ static loff_t iomap_readpage_iter(const struct iomap_iter *iter,
        unsigned poff, plen;
        sector_t sector;
 
-       if (iomap->type == IOMAP_INLINE) {
-               loff_t ret = iomap_read_inline_data(iter, page);
-
-               if (ret < 0)
-                       return ret;
-               return 0;
-       }
+       if (iomap->type == IOMAP_INLINE)
+               return iomap_read_inline_data(iter, page);
 
        /* zero post-eof blocks as the page may be mapped */
        iop = iomap_page_create(iter->inode, page);
@@ -587,15 +591,10 @@ static int __iomap_write_begin(const struct iomap_iter *iter, loff_t pos,
 static int iomap_write_begin_inline(const struct iomap_iter *iter,
                struct page *page)
 {
-       int ret;
-
        /* needs more work for the tailpacking case; disable for now */
        if (WARN_ON_ONCE(iomap_iter_srcmap(iter)->offset != 0))
                return -EIO;
-       ret = iomap_read_inline_data(iter, page);
-       if (ret < 0)
-               return ret;
-       return 0;
+       return iomap_read_inline_data(iter, page);
 }
 
 static int iomap_write_begin(const struct iomap_iter *iter, loff_t pos,