Skip to content

Commit 5499225

Browse files
author
Andreas Gruenbacher
committed
gfs2: Add new gfs2_iomap_get helper
Rename the current gfs2_iomap_get and gfs2_iomap_alloc functions to __*. Add a new gfs2_iomap_get helper that doesn't expose struct metapath. Rename gfs2_iomap_get_alloc to gfs2_iomap_alloc. Use the new helpers where they make sense. Signed-off-by: Andreas Gruenbacher <[email protected]>
1 parent 0bf3e32 commit 5499225

File tree

3 files changed

+41
-35
lines changed

3 files changed

+41
-35
lines changed

fs/gfs2/bmap.c

Lines changed: 35 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -632,7 +632,7 @@ enum alloc_state {
632632
};
633633

634634
/**
635-
* gfs2_iomap_alloc - Build a metadata tree of the requested height
635+
* __gfs2_iomap_alloc - Build a metadata tree of the requested height
636636
* @inode: The GFS2 inode
637637
* @iomap: The iomap structure
638638
* @mp: The metapath, with proper height information calculated
@@ -642,7 +642,7 @@ enum alloc_state {
642642
* ii) Indirect blocks to fill in lower part of the metadata tree
643643
* iii) Data blocks
644644
*
645-
* This function is called after gfs2_iomap_get, which works out the
645+
* This function is called after __gfs2_iomap_get, which works out the
646646
* total number of blocks which we need via gfs2_alloc_size.
647647
*
648648
* We then do the actual allocation asking for an extent at a time (if
@@ -660,8 +660,8 @@ enum alloc_state {
660660
* Returns: errno on error
661661
*/
662662

663-
static int gfs2_iomap_alloc(struct inode *inode, struct iomap *iomap,
664-
struct metapath *mp)
663+
static int __gfs2_iomap_alloc(struct inode *inode, struct iomap *iomap,
664+
struct metapath *mp)
665665
{
666666
struct gfs2_inode *ip = GFS2_I(inode);
667667
struct gfs2_sbd *sdp = GFS2_SB(inode);
@@ -802,10 +802,10 @@ static u64 gfs2_alloc_size(struct inode *inode, struct metapath *mp, u64 size)
802802

803803
/*
804804
* For writes to stuffed files, this function is called twice via
805-
* gfs2_iomap_get, before and after unstuffing. The size we return the
805+
* __gfs2_iomap_get, before and after unstuffing. The size we return the
806806
* first time needs to be large enough to get the reservation and
807807
* allocation sizes right. The size we return the second time must
808-
* be exact or else gfs2_iomap_alloc won't do the right thing.
808+
* be exact or else __gfs2_iomap_alloc won't do the right thing.
809809
*/
810810

811811
if (gfs2_is_stuffed(ip) || mp->mp_fheight != mp->mp_aheight) {
@@ -829,7 +829,7 @@ static u64 gfs2_alloc_size(struct inode *inode, struct metapath *mp, u64 size)
829829
}
830830

831831
/**
832-
* gfs2_iomap_get - Map blocks from an inode to disk blocks
832+
* __gfs2_iomap_get - Map blocks from an inode to disk blocks
833833
* @inode: The inode
834834
* @pos: Starting position in bytes
835835
* @length: Length to map, in bytes
@@ -839,9 +839,9 @@ static u64 gfs2_alloc_size(struct inode *inode, struct metapath *mp, u64 size)
839839
*
840840
* Returns: errno
841841
*/
842-
static int gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length,
843-
unsigned flags, struct iomap *iomap,
844-
struct metapath *mp)
842+
static int __gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length,
843+
unsigned flags, struct iomap *iomap,
844+
struct metapath *mp)
845845
{
846846
struct gfs2_inode *ip = GFS2_I(inode);
847847
struct gfs2_sbd *sdp = GFS2_SB(inode);
@@ -975,12 +975,10 @@ static int gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length,
975975
int gfs2_lblk_to_dblk(struct inode *inode, u32 lblock, u64 *dblock)
976976
{
977977
struct iomap iomap = { };
978-
struct metapath mp = { .mp_aheight = 1, };
979978
loff_t pos = (loff_t)lblock << inode->i_blkbits;
980979
int ret;
981980

982-
ret = gfs2_iomap_get(inode, pos, i_blocksize(inode), 0, &iomap, &mp);
983-
release_metapath(&mp);
981+
ret = gfs2_iomap_get(inode, pos, i_blocksize(inode), &iomap);
984982
if (ret == 0)
985983
*dblock = iomap.addr >> inode->i_blkbits;
986984

@@ -1109,14 +1107,14 @@ static int gfs2_iomap_begin_write(struct inode *inode, loff_t pos,
11091107
if (ret)
11101108
goto out_trans_end;
11111109
release_metapath(mp);
1112-
ret = gfs2_iomap_get(inode, iomap->offset,
1113-
iomap->length, flags, iomap, mp);
1110+
ret = __gfs2_iomap_get(inode, iomap->offset,
1111+
iomap->length, flags, iomap, mp);
11141112
if (ret)
11151113
goto out_trans_end;
11161114
}
11171115

11181116
if (iomap->type == IOMAP_HOLE) {
1119-
ret = gfs2_iomap_alloc(inode, iomap, mp);
1117+
ret = __gfs2_iomap_alloc(inode, iomap, mp);
11201118
if (ret) {
11211119
gfs2_trans_end(sdp);
11221120
gfs2_inplace_release(ip);
@@ -1168,7 +1166,7 @@ static int gfs2_iomap_begin(struct inode *inode, loff_t pos, loff_t length,
11681166
goto out;
11691167
}
11701168

1171-
ret = gfs2_iomap_get(inode, pos, length, flags, iomap, &mp);
1169+
ret = __gfs2_iomap_get(inode, pos, length, flags, iomap, &mp);
11721170
if (ret)
11731171
goto out_unlock;
11741172

@@ -1290,20 +1288,18 @@ int gfs2_block_map(struct inode *inode, sector_t lblock,
12901288
struct gfs2_inode *ip = GFS2_I(inode);
12911289
loff_t pos = (loff_t)lblock << inode->i_blkbits;
12921290
loff_t length = bh_map->b_size;
1293-
struct metapath mp = { .mp_aheight = 1, };
12941291
struct iomap iomap = { };
1295-
int flags = create ? IOMAP_WRITE : 0;
12961292
int ret;
12971293

12981294
clear_buffer_mapped(bh_map);
12991295
clear_buffer_new(bh_map);
13001296
clear_buffer_boundary(bh_map);
13011297
trace_gfs2_bmap(ip, bh_map, lblock, create, 1);
13021298

1303-
ret = gfs2_iomap_get(inode, pos, length, flags, &iomap, &mp);
1304-
if (create && !ret && iomap.type == IOMAP_HOLE)
1305-
ret = gfs2_iomap_alloc(inode, &iomap, &mp);
1306-
release_metapath(&mp);
1299+
if (!create)
1300+
ret = gfs2_iomap_get(inode, pos, length, &iomap);
1301+
else
1302+
ret = gfs2_iomap_alloc(inode, pos, length, &iomap);
13071303
if (ret)
13081304
goto out;
13091305

@@ -1461,15 +1457,26 @@ static int trunc_start(struct inode *inode, u64 newsize)
14611457
return error;
14621458
}
14631459

1464-
int gfs2_iomap_get_alloc(struct inode *inode, loff_t pos, loff_t length,
1465-
struct iomap *iomap)
1460+
int gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length,
1461+
struct iomap *iomap)
1462+
{
1463+
struct metapath mp = { .mp_aheight = 1, };
1464+
int ret;
1465+
1466+
ret = __gfs2_iomap_get(inode, pos, length, 0, iomap, &mp);
1467+
release_metapath(&mp);
1468+
return ret;
1469+
}
1470+
1471+
int gfs2_iomap_alloc(struct inode *inode, loff_t pos, loff_t length,
1472+
struct iomap *iomap)
14661473
{
14671474
struct metapath mp = { .mp_aheight = 1, };
14681475
int ret;
14691476

1470-
ret = gfs2_iomap_get(inode, pos, length, IOMAP_WRITE, iomap, &mp);
1477+
ret = __gfs2_iomap_get(inode, pos, length, IOMAP_WRITE, iomap, &mp);
14711478
if (!ret && iomap->type == IOMAP_HOLE)
1472-
ret = gfs2_iomap_alloc(inode, iomap, &mp);
1479+
ret = __gfs2_iomap_alloc(inode, iomap, &mp);
14731480
release_metapath(&mp);
14741481
return ret;
14751482
}
@@ -2519,7 +2526,6 @@ int __gfs2_punch_hole(struct file *file, loff_t offset, loff_t length)
25192526
static int gfs2_map_blocks(struct iomap_writepage_ctx *wpc, struct inode *inode,
25202527
loff_t offset)
25212528
{
2522-
struct metapath mp = { .mp_aheight = 1, };
25232529
int ret;
25242530

25252531
if (WARN_ON_ONCE(gfs2_is_stuffed(GFS2_I(inode))))
@@ -2530,8 +2536,7 @@ static int gfs2_map_blocks(struct iomap_writepage_ctx *wpc, struct inode *inode,
25302536
return 0;
25312537

25322538
memset(&wpc->iomap, 0, sizeof(wpc->iomap));
2533-
ret = gfs2_iomap_get(inode, offset, INT_MAX, 0, &wpc->iomap, &mp);
2534-
release_metapath(&mp);
2539+
ret = gfs2_iomap_get(inode, offset, INT_MAX, &wpc->iomap);
25352540
return ret;
25362541
}
25372542

fs/gfs2/bmap.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,10 @@ extern const struct iomap_writeback_ops gfs2_writeback_ops;
4949
extern int gfs2_unstuff_dinode(struct gfs2_inode *ip, struct page *page);
5050
extern int gfs2_block_map(struct inode *inode, sector_t lblock,
5151
struct buffer_head *bh, int create);
52-
extern int gfs2_iomap_get_alloc(struct inode *inode, loff_t pos, loff_t length,
53-
struct iomap *iomap);
52+
extern int gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length,
53+
struct iomap *iomap);
54+
extern int gfs2_iomap_alloc(struct inode *inode, loff_t pos, loff_t length,
55+
struct iomap *iomap);
5456
extern int gfs2_extent_map(struct inode *inode, u64 lblock, int *new,
5557
u64 *dblock, unsigned *extlen);
5658
extern int gfs2_setattr_size(struct inode *inode, u64 size);

fs/gfs2/file.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,7 @@ static int gfs2_allocate_page_backing(struct page *page, unsigned int length)
421421
do {
422422
struct iomap iomap = { };
423423

424-
if (gfs2_iomap_get_alloc(page->mapping->host, pos, length, &iomap))
424+
if (gfs2_iomap_alloc(page->mapping->host, pos, length, &iomap))
425425
return -EIO;
426426

427427
if (length < iomap.length)
@@ -991,8 +991,7 @@ static int fallocate_chunk(struct inode *inode, loff_t offset, loff_t len,
991991
while (offset < end) {
992992
struct iomap iomap = { };
993993

994-
error = gfs2_iomap_get_alloc(inode, offset, end - offset,
995-
&iomap);
994+
error = gfs2_iomap_alloc(inode, offset, end - offset, &iomap);
996995
if (error)
997996
goto out;
998997
offset = iomap.offset + iomap.length;

0 commit comments

Comments
 (0)