gfs2: simplify gfs2_block_map
authorBob Peterson <rpeterso@redhat.com>
Wed, 19 Aug 2020 14:24:48 +0000 (09:24 -0500)
committerAndreas Gruenbacher <agruenba@redhat.com>
Thu, 15 Oct 2020 12:29:04 +0000 (14:29 +0200)
Function gfs2_block_map had a lot of redundancy between its create and
no_create paths. This patch simplifies the code to eliminate the redundancy.

Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
fs/gfs2/bmap.c

index ed425d3..62d9081 100644 (file)
@@ -1292,6 +1292,7 @@ int gfs2_block_map(struct inode *inode, sector_t lblock,
        loff_t length = bh_map->b_size;
        struct metapath mp = { .mp_aheight = 1, };
        struct iomap iomap = { };
+       int flags = create ? IOMAP_WRITE : 0;
        int ret;
 
        clear_buffer_mapped(bh_map);
@@ -1299,15 +1300,10 @@ int gfs2_block_map(struct inode *inode, sector_t lblock,
        clear_buffer_boundary(bh_map);
        trace_gfs2_bmap(ip, bh_map, lblock, create, 1);
 
-       if (create) {
-               ret = gfs2_iomap_get(inode, pos, length, IOMAP_WRITE, &iomap, &mp);
-               if (!ret && iomap.type == IOMAP_HOLE)
-                       ret = gfs2_iomap_alloc(inode, &iomap, &mp);
-               release_metapath(&mp);
-       } else {
-               ret = gfs2_iomap_get(inode, pos, length, 0, &iomap, &mp);
-               release_metapath(&mp);
-       }
+       ret = gfs2_iomap_get(inode, pos, length, flags, &iomap, &mp);
+       if (create && !ret && iomap.type == IOMAP_HOLE)
+               ret = gfs2_iomap_alloc(inode, &iomap, &mp);
+       release_metapath(&mp);
        if (ret)
                goto out;