* [Cluster-devel] [PATCH 0/4] gfs2: Various cleanups
@ 2021-04-01 9:18 Andreas Gruenbacher
2021-04-01 9:18 ` [Cluster-devel] [PATCH 1/4] gfs2: Add new gfs2_iomap_get helper Andreas Gruenbacher
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Andreas Gruenbacher @ 2021-04-01 9:18 UTC (permalink / raw)
To: cluster-devel.redhat.com
Here are a few minor clanups; please review.
Thanks,
Andreas
Andreas Gruenbacher (4):
gfs2: Add new gfs2_iomap_get helper
gfs2: Turn gfs2_extent_map into gfs2_{get,alloc}_extent
gfs2: Replace gfs2_lblk_to_dblk with gfs2_get_extent
gfs2: Turn gfs2_meta_indirect_buffer into gfs2_meta_buffer
fs/gfs2/bmap.c | 148 ++++++++++++++++++++++-----------------------
fs/gfs2/bmap.h | 13 ++--
fs/gfs2/dir.c | 13 ++--
fs/gfs2/file.c | 5 +-
fs/gfs2/log.c | 6 +-
fs/gfs2/meta_io.c | 9 ++-
fs/gfs2/meta_io.h | 6 +-
fs/gfs2/quota.c | 4 +-
fs/gfs2/recovery.c | 4 +-
9 files changed, 106 insertions(+), 102 deletions(-)
--
2.26.2
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Cluster-devel] [PATCH 1/4] gfs2: Add new gfs2_iomap_get helper
2021-04-01 9:18 [Cluster-devel] [PATCH 0/4] gfs2: Various cleanups Andreas Gruenbacher
@ 2021-04-01 9:18 ` Andreas Gruenbacher
2021-04-01 13:58 ` Bob Peterson
2021-04-01 9:18 ` [Cluster-devel] [PATCH 2/4] gfs2: Turn gfs2_extent_map into gfs2_{get, alloc}_extent Andreas Gruenbacher
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: Andreas Gruenbacher @ 2021-04-01 9:18 UTC (permalink / raw)
To: cluster-devel.redhat.com
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 <agruenba@redhat.com>
---
fs/gfs2/bmap.c | 65 +++++++++++++++++++++++++++-----------------------
fs/gfs2/bmap.h | 6 +++--
fs/gfs2/file.c | 5 ++--
3 files changed, 41 insertions(+), 35 deletions(-)
diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index 7a358ae05185..cc12dc0d6955 100644
--- a/fs/gfs2/bmap.c
+++ b/fs/gfs2/bmap.c
@@ -632,7 +632,7 @@ enum alloc_state {
};
/**
- * gfs2_iomap_alloc - Build a metadata tree of the requested height
+ * __gfs2_iomap_alloc - Build a metadata tree of the requested height
* @inode: The GFS2 inode
* @iomap: The iomap structure
* @mp: The metapath, with proper height information calculated
@@ -642,7 +642,7 @@ enum alloc_state {
* ii) Indirect blocks to fill in lower part of the metadata tree
* iii) Data blocks
*
- * This function is called after gfs2_iomap_get, which works out the
+ * This function is called after __gfs2_iomap_get, which works out the
* total number of blocks which we need via gfs2_alloc_size.
*
* We then do the actual allocation asking for an extent at a time (if
@@ -660,8 +660,8 @@ enum alloc_state {
* Returns: errno on error
*/
-static int gfs2_iomap_alloc(struct inode *inode, struct iomap *iomap,
- struct metapath *mp)
+static int __gfs2_iomap_alloc(struct inode *inode, struct iomap *iomap,
+ struct metapath *mp)
{
struct gfs2_inode *ip = GFS2_I(inode);
struct gfs2_sbd *sdp = GFS2_SB(inode);
@@ -802,10 +802,10 @@ static u64 gfs2_alloc_size(struct inode *inode, struct metapath *mp, u64 size)
/*
* For writes to stuffed files, this function is called twice via
- * gfs2_iomap_get, before and after unstuffing. The size we return the
+ * __gfs2_iomap_get, before and after unstuffing. The size we return the
* first time needs to be large enough to get the reservation and
* allocation sizes right. The size we return the second time must
- * be exact or else gfs2_iomap_alloc won't do the right thing.
+ * be exact or else __gfs2_iomap_alloc won't do the right thing.
*/
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)
}
/**
- * gfs2_iomap_get - Map blocks from an inode to disk blocks
+ * __gfs2_iomap_get - Map blocks from an inode to disk blocks
* @inode: The inode
* @pos: Starting position in bytes
* @length: Length to map, in bytes
@@ -839,9 +839,9 @@ static u64 gfs2_alloc_size(struct inode *inode, struct metapath *mp, u64 size)
*
* Returns: errno
*/
-static int gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length,
- unsigned flags, struct iomap *iomap,
- struct metapath *mp)
+static int __gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length,
+ unsigned flags, struct iomap *iomap,
+ struct metapath *mp)
{
struct gfs2_inode *ip = GFS2_I(inode);
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,
int gfs2_lblk_to_dblk(struct inode *inode, u32 lblock, u64 *dblock)
{
struct iomap iomap = { };
- struct metapath mp = { .mp_aheight = 1, };
loff_t pos = (loff_t)lblock << inode->i_blkbits;
int ret;
- ret = gfs2_iomap_get(inode, pos, i_blocksize(inode), 0, &iomap, &mp);
- release_metapath(&mp);
+ ret = gfs2_iomap_get(inode, pos, i_blocksize(inode), &iomap);
if (ret == 0)
*dblock = iomap.addr >> inode->i_blkbits;
@@ -1109,14 +1107,14 @@ static int gfs2_iomap_begin_write(struct inode *inode, loff_t pos,
if (ret)
goto out_trans_end;
release_metapath(mp);
- ret = gfs2_iomap_get(inode, iomap->offset,
- iomap->length, flags, iomap, mp);
+ ret = __gfs2_iomap_get(inode, iomap->offset,
+ iomap->length, flags, iomap, mp);
if (ret)
goto out_trans_end;
}
if (iomap->type == IOMAP_HOLE) {
- ret = gfs2_iomap_alloc(inode, iomap, mp);
+ ret = __gfs2_iomap_alloc(inode, iomap, mp);
if (ret) {
gfs2_trans_end(sdp);
gfs2_inplace_release(ip);
@@ -1168,7 +1166,7 @@ static int gfs2_iomap_begin(struct inode *inode, loff_t pos, loff_t length,
goto out;
}
- ret = gfs2_iomap_get(inode, pos, length, flags, iomap, &mp);
+ ret = __gfs2_iomap_get(inode, pos, length, flags, iomap, &mp);
if (ret)
goto out_unlock;
@@ -1290,9 +1288,7 @@ int gfs2_block_map(struct inode *inode, sector_t lblock,
struct gfs2_inode *ip = GFS2_I(inode);
loff_t pos = (loff_t)lblock << inode->i_blkbits;
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);
@@ -1300,10 +1296,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);
- 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 (!create)
+ ret = gfs2_iomap_get(inode, pos, length, &iomap);
+ else
+ ret = gfs2_iomap_alloc(inode, pos, length, &iomap);
if (ret)
goto out;
@@ -1461,15 +1457,26 @@ static int trunc_start(struct inode *inode, u64 newsize)
return error;
}
-int gfs2_iomap_get_alloc(struct inode *inode, loff_t pos, loff_t length,
- struct iomap *iomap)
+int gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length,
+ struct iomap *iomap)
+{
+ struct metapath mp = { .mp_aheight = 1, };
+ int ret;
+
+ ret = __gfs2_iomap_get(inode, pos, length, 0, iomap, &mp);
+ release_metapath(&mp);
+ return ret;
+}
+
+int gfs2_iomap_alloc(struct inode *inode, loff_t pos, loff_t length,
+ struct iomap *iomap)
{
struct metapath mp = { .mp_aheight = 1, };
int ret;
- ret = gfs2_iomap_get(inode, pos, length, IOMAP_WRITE, iomap, &mp);
+ ret = __gfs2_iomap_get(inode, pos, length, IOMAP_WRITE, iomap, &mp);
if (!ret && iomap->type == IOMAP_HOLE)
- ret = gfs2_iomap_alloc(inode, iomap, &mp);
+ ret = __gfs2_iomap_alloc(inode, iomap, &mp);
release_metapath(&mp);
return ret;
}
@@ -2519,7 +2526,6 @@ int __gfs2_punch_hole(struct file *file, loff_t offset, loff_t length)
static int gfs2_map_blocks(struct iomap_writepage_ctx *wpc, struct inode *inode,
loff_t offset)
{
- struct metapath mp = { .mp_aheight = 1, };
int ret;
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,
return 0;
memset(&wpc->iomap, 0, sizeof(wpc->iomap));
- ret = gfs2_iomap_get(inode, offset, INT_MAX, 0, &wpc->iomap, &mp);
- release_metapath(&mp);
+ ret = gfs2_iomap_get(inode, offset, INT_MAX, &wpc->iomap);
return ret;
}
diff --git a/fs/gfs2/bmap.h b/fs/gfs2/bmap.h
index aed4632d47d3..c63efee8aaa4 100644
--- a/fs/gfs2/bmap.h
+++ b/fs/gfs2/bmap.h
@@ -49,8 +49,10 @@ extern const struct iomap_writeback_ops gfs2_writeback_ops;
extern int gfs2_unstuff_dinode(struct gfs2_inode *ip, struct page *page);
extern int gfs2_block_map(struct inode *inode, sector_t lblock,
struct buffer_head *bh, int create);
-extern int gfs2_iomap_get_alloc(struct inode *inode, loff_t pos, loff_t length,
- struct iomap *iomap);
+extern int gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length,
+ struct iomap *iomap);
+extern int gfs2_iomap_alloc(struct inode *inode, loff_t pos, loff_t length,
+ struct iomap *iomap);
extern int gfs2_extent_map(struct inode *inode, u64 lblock, int *new,
u64 *dblock, unsigned *extlen);
extern int gfs2_setattr_size(struct inode *inode, u64 size);
diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c
index 2d500f90cdac..5d34b974f4fd 100644
--- a/fs/gfs2/file.c
+++ b/fs/gfs2/file.c
@@ -421,7 +421,7 @@ static int gfs2_allocate_page_backing(struct page *page, unsigned int length)
do {
struct iomap iomap = { };
- if (gfs2_iomap_get_alloc(page->mapping->host, pos, length, &iomap))
+ if (gfs2_iomap_alloc(page->mapping->host, pos, length, &iomap))
return -EIO;
if (length < iomap.length)
@@ -991,8 +991,7 @@ static int fallocate_chunk(struct inode *inode, loff_t offset, loff_t len,
while (offset < end) {
struct iomap iomap = { };
- error = gfs2_iomap_get_alloc(inode, offset, end - offset,
- &iomap);
+ error = gfs2_iomap_alloc(inode, offset, end - offset, &iomap);
if (error)
goto out;
offset = iomap.offset + iomap.length;
--
2.26.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Cluster-devel] [PATCH 2/4] gfs2: Turn gfs2_extent_map into gfs2_{get, alloc}_extent
2021-04-01 9:18 [Cluster-devel] [PATCH 0/4] gfs2: Various cleanups Andreas Gruenbacher
2021-04-01 9:18 ` [Cluster-devel] [PATCH 1/4] gfs2: Add new gfs2_iomap_get helper Andreas Gruenbacher
@ 2021-04-01 9:18 ` Andreas Gruenbacher
2021-04-01 9:45 ` Andrew Price
2021-04-01 9:18 ` [Cluster-devel] [PATCH 3/4] gfs2: Replace gfs2_lblk_to_dblk with gfs2_get_extent Andreas Gruenbacher
2021-04-01 9:18 ` [Cluster-devel] [PATCH 4/4] gfs2: Turn gfs2_meta_indirect_buffer into gfs2_meta_buffer Andreas Gruenbacher
3 siblings, 1 reply; 8+ messages in thread
From: Andreas Gruenbacher @ 2021-04-01 9:18 UTC (permalink / raw)
To: cluster-devel.redhat.com
Convert gfs2_extent_map to iomap and split it into gfs2_get_extent and
gfs2_alloc_extent. Instead of hardcoding the extent size, pass it in
via the extlen parameter.
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
---
fs/gfs2/bmap.c | 59 ++++++++++++++++++++++++++++++----------------
fs/gfs2/bmap.h | 6 +++--
fs/gfs2/dir.c | 13 +++++-----
fs/gfs2/quota.c | 4 ++--
fs/gfs2/recovery.c | 4 ++--
5 files changed, 53 insertions(+), 33 deletions(-)
diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index cc12dc0d6955..ac959a99ea81 100644
--- a/fs/gfs2/bmap.c
+++ b/fs/gfs2/bmap.c
@@ -1320,28 +1320,47 @@ int gfs2_block_map(struct inode *inode, sector_t lblock,
return ret;
}
-/*
- * Deprecated: do not use in new code
- */
-int gfs2_extent_map(struct inode *inode, u64 lblock, int *new, u64 *dblock, unsigned *extlen)
+int gfs2_get_extent(struct inode *inode, u64 lblock, u64 *dblock,
+ unsigned int *extlen)
{
- struct buffer_head bh = { .b_state = 0, .b_blocknr = 0 };
+ unsigned int blkbits = inode->i_blkbits;
+ struct iomap iomap = { };
+ unsigned int len;
int ret;
- int create = *new;
-
- BUG_ON(!extlen);
- BUG_ON(!dblock);
- BUG_ON(!new);
-
- bh.b_size = BIT(inode->i_blkbits + (create ? 0 : 5));
- ret = gfs2_block_map(inode, lblock, &bh, create);
- *extlen = bh.b_size >> inode->i_blkbits;
- *dblock = bh.b_blocknr;
- if (buffer_new(&bh))
- *new = 1;
- else
- *new = 0;
- return ret;
+
+ ret = gfs2_iomap_get(inode, lblock << blkbits, *extlen << blkbits,
+ &iomap);
+ if (ret)
+ return ret;
+ if (iomap.type != IOMAP_MAPPED)
+ return -EIO;
+ *dblock = iomap.addr >> blkbits;
+ len = iomap.length >> blkbits;
+ if (len < *extlen)
+ *extlen = len;
+ return 0;
+}
+
+int gfs2_alloc_extent(struct inode *inode, u64 lblock, u64 *dblock,
+ unsigned int *extlen, bool *new)
+{
+ unsigned int blkbits = inode->i_blkbits;
+ struct iomap iomap = { };
+ unsigned int len;
+ int ret;
+
+ ret = gfs2_iomap_alloc(inode, lblock << blkbits, *extlen << blkbits,
+ &iomap);
+ if (ret)
+ return ret;
+ if (iomap.type != IOMAP_MAPPED)
+ return -EIO;
+ *dblock = iomap.addr >> blkbits;
+ len = iomap.length >> blkbits;
+ if (len < *extlen)
+ *extlen = len;
+ *new = iomap.flags & IOMAP_F_NEW;
+ return 0;
}
/*
diff --git a/fs/gfs2/bmap.h b/fs/gfs2/bmap.h
index c63efee8aaa4..67ef7cf7fdac 100644
--- a/fs/gfs2/bmap.h
+++ b/fs/gfs2/bmap.h
@@ -53,8 +53,10 @@ extern int gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length,
struct iomap *iomap);
extern int gfs2_iomap_alloc(struct inode *inode, loff_t pos, loff_t length,
struct iomap *iomap);
-extern int gfs2_extent_map(struct inode *inode, u64 lblock, int *new,
- u64 *dblock, unsigned *extlen);
+extern int gfs2_get_extent(struct inode *inode, u64 lblock, u64 *dblock,
+ unsigned int *extlen);
+extern int gfs2_alloc_extent(struct inode *inode, u64 lblock, u64 *dblock,
+ unsigned *extlen, bool *new);
extern int gfs2_setattr_size(struct inode *inode, u64 size);
extern void gfs2_trim_blocks(struct inode *inode);
extern int gfs2_truncatei_resume(struct gfs2_inode *ip);
diff --git a/fs/gfs2/dir.c b/fs/gfs2/dir.c
index c0f2875c946c..4517ffb7c13d 100644
--- a/fs/gfs2/dir.c
+++ b/fs/gfs2/dir.c
@@ -159,7 +159,7 @@ static int gfs2_dir_write_data(struct gfs2_inode *ip, const char *buf,
unsigned int o;
int copied = 0;
int error = 0;
- int new = 0;
+ bool new = false;
if (!size)
return 0;
@@ -189,9 +189,9 @@ static int gfs2_dir_write_data(struct gfs2_inode *ip, const char *buf,
amount = sdp->sd_sb.sb_bsize - o;
if (!extlen) {
- new = 1;
- error = gfs2_extent_map(&ip->i_inode, lblock, &new,
- &dblock, &extlen);
+ extlen = 1;
+ error = gfs2_alloc_extent(&ip->i_inode, lblock, &dblock,
+ &extlen, &new);
if (error)
goto fail;
error = -EIO;
@@ -286,15 +286,14 @@ static int gfs2_dir_read_data(struct gfs2_inode *ip, __be64 *buf,
while (copied < size) {
unsigned int amount;
struct buffer_head *bh;
- int new;
amount = size - copied;
if (amount > sdp->sd_sb.sb_bsize - o)
amount = sdp->sd_sb.sb_bsize - o;
if (!extlen) {
- new = 0;
- error = gfs2_extent_map(&ip->i_inode, lblock, &new,
+ extlen = 32;
+ error = gfs2_get_extent(&ip->i_inode, lblock,
&dblock, &extlen);
if (error || !dblock)
goto fail;
diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c
index 6e173ae378c4..9b1aca7e1264 100644
--- a/fs/gfs2/quota.c
+++ b/fs/gfs2/quota.c
@@ -1375,8 +1375,8 @@ int gfs2_quota_init(struct gfs2_sbd *sdp)
unsigned int y;
if (!extlen) {
- int new = 0;
- error = gfs2_extent_map(&ip->i_inode, x, &new, &dblock, &extlen);
+ extlen = 32;
+ error = gfs2_get_extent(&ip->i_inode, x, &dblock, &extlen);
if (error)
goto fail;
}
diff --git a/fs/gfs2/recovery.c b/fs/gfs2/recovery.c
index 282173774005..4ab4cdbf774a 100644
--- a/fs/gfs2/recovery.c
+++ b/fs/gfs2/recovery.c
@@ -34,12 +34,12 @@ int gfs2_replay_read_block(struct gfs2_jdesc *jd, unsigned int blk,
{
struct gfs2_inode *ip = GFS2_I(jd->jd_inode);
struct gfs2_glock *gl = ip->i_gl;
- int new = 0;
u64 dblock;
u32 extlen;
int error;
- error = gfs2_extent_map(&ip->i_inode, blk, &new, &dblock, &extlen);
+ extlen = 32;
+ error = gfs2_get_extent(&ip->i_inode, blk, &dblock, &extlen);
if (error)
return error;
if (!dblock) {
--
2.26.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Cluster-devel] [PATCH 3/4] gfs2: Replace gfs2_lblk_to_dblk with gfs2_get_extent
2021-04-01 9:18 [Cluster-devel] [PATCH 0/4] gfs2: Various cleanups Andreas Gruenbacher
2021-04-01 9:18 ` [Cluster-devel] [PATCH 1/4] gfs2: Add new gfs2_iomap_get helper Andreas Gruenbacher
2021-04-01 9:18 ` [Cluster-devel] [PATCH 2/4] gfs2: Turn gfs2_extent_map into gfs2_{get, alloc}_extent Andreas Gruenbacher
@ 2021-04-01 9:18 ` Andreas Gruenbacher
2021-04-01 9:18 ` [Cluster-devel] [PATCH 4/4] gfs2: Turn gfs2_meta_indirect_buffer into gfs2_meta_buffer Andreas Gruenbacher
3 siblings, 0 replies; 8+ messages in thread
From: Andreas Gruenbacher @ 2021-04-01 9:18 UTC (permalink / raw)
To: cluster-devel.redhat.com
We don't need two very similar functions for mapping logical blocks to physical
blocks.
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
---
fs/gfs2/bmap.c | 24 ------------------------
fs/gfs2/bmap.h | 1 -
fs/gfs2/log.c | 6 +++++-
3 files changed, 5 insertions(+), 26 deletions(-)
diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index ac959a99ea81..bad5dc641bbd 100644
--- a/fs/gfs2/bmap.c
+++ b/fs/gfs2/bmap.c
@@ -961,30 +961,6 @@ static int __gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length,
goto out;
}
-/**
- * gfs2_lblk_to_dblk - convert logical block to disk block
- * @inode: the inode of the file we're mapping
- * @lblock: the block relative to the start of the file
- * @dblock: the returned dblock, if no error
- *
- * This function maps a single block from a file logical block (relative to
- * the start of the file) to a file system absolute block using iomap.
- *
- * Returns: the absolute file system block, or an error
- */
-int gfs2_lblk_to_dblk(struct inode *inode, u32 lblock, u64 *dblock)
-{
- struct iomap iomap = { };
- loff_t pos = (loff_t)lblock << inode->i_blkbits;
- int ret;
-
- ret = gfs2_iomap_get(inode, pos, i_blocksize(inode), &iomap);
- if (ret == 0)
- *dblock = iomap.addr >> inode->i_blkbits;
-
- return ret;
-}
-
static int gfs2_write_lock(struct inode *inode)
{
struct gfs2_inode *ip = GFS2_I(inode);
diff --git a/fs/gfs2/bmap.h b/fs/gfs2/bmap.h
index 67ef7cf7fdac..6676d863faef 100644
--- a/fs/gfs2/bmap.h
+++ b/fs/gfs2/bmap.h
@@ -66,6 +66,5 @@ extern int gfs2_write_alloc_required(struct gfs2_inode *ip, u64 offset,
extern int gfs2_map_journal_extents(struct gfs2_sbd *sdp, struct gfs2_jdesc *jd);
extern void gfs2_free_journal_extents(struct gfs2_jdesc *jd);
extern int __gfs2_punch_hole(struct file *file, loff_t offset, loff_t length);
-extern int gfs2_lblk_to_dblk(struct inode *inode, u32 lblock, u64 *dblock);
#endif /* __BMAP_DOT_H__ */
diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
index 6410281546f9..69ddd9518396 100644
--- a/fs/gfs2/log.c
+++ b/fs/gfs2/log.c
@@ -859,7 +859,11 @@ void gfs2_write_log_header(struct gfs2_sbd *sdp, struct gfs2_jdesc *jd,
if (!list_empty(&jd->extent_list))
dblock = gfs2_log_bmap(jd, lblock);
else {
- int ret = gfs2_lblk_to_dblk(jd->jd_inode, lblock, &dblock);
+ unsigned int extlen;
+ int ret;
+
+ extlen = 1;
+ ret = gfs2_get_extent(jd->jd_inode, lblock, &dblock, &extlen);
if (gfs2_assert_withdraw(sdp, ret == 0))
return;
}
--
2.26.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Cluster-devel] [PATCH 4/4] gfs2: Turn gfs2_meta_indirect_buffer into gfs2_meta_buffer
2021-04-01 9:18 [Cluster-devel] [PATCH 0/4] gfs2: Various cleanups Andreas Gruenbacher
` (2 preceding siblings ...)
2021-04-01 9:18 ` [Cluster-devel] [PATCH 3/4] gfs2: Replace gfs2_lblk_to_dblk with gfs2_get_extent Andreas Gruenbacher
@ 2021-04-01 9:18 ` Andreas Gruenbacher
3 siblings, 0 replies; 8+ messages in thread
From: Andreas Gruenbacher @ 2021-04-01 9:18 UTC (permalink / raw)
To: cluster-devel.redhat.com
Instead of only supporting GFS2_METATYPE_DI and GFS2_METATYPE_IN blocks,
make the block type a parameter of gfs2_meta_indirect_buffer and rename
the function to gfs2_meta_buffer.
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
---
fs/gfs2/bmap.c | 2 +-
fs/gfs2/meta_io.c | 9 ++++-----
fs/gfs2/meta_io.h | 6 +++---
3 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
index bad5dc641bbd..ae9ba03fbd48 100644
--- a/fs/gfs2/bmap.c
+++ b/fs/gfs2/bmap.c
@@ -331,7 +331,7 @@ static int __fillup_metapath(struct gfs2_inode *ip, struct metapath *mp,
if (!dblock)
break;
- ret = gfs2_meta_indirect_buffer(ip, x + 1, dblock, &mp->mp_bh[x + 1]);
+ ret = gfs2_meta_buffer(ip, GFS2_METATYPE_IN, dblock, &mp->mp_bh[x + 1]);
if (ret)
return ret;
}
diff --git a/fs/gfs2/meta_io.c b/fs/gfs2/meta_io.c
index 2db573e31f78..4946cbce1ab6 100644
--- a/fs/gfs2/meta_io.c
+++ b/fs/gfs2/meta_io.c
@@ -462,23 +462,22 @@ void gfs2_journal_wipe(struct gfs2_inode *ip, u64 bstart, u32 blen)
}
/**
- * gfs2_meta_indirect_buffer - Get a metadata buffer
+ * gfs2_meta_buffer - Get a metadata buffer
* @ip: The GFS2 inode
- * @height: The level of this buf in the metadata (indir addr) tree (if any)
+ * @mtype: The block type (GFS2_METATYPE_*)
* @num: The block number (device relative) of the buffer
* @bhp: the buffer is returned here
*
* Returns: errno
*/
-int gfs2_meta_indirect_buffer(struct gfs2_inode *ip, int height, u64 num,
- struct buffer_head **bhp)
+int gfs2_meta_buffer(struct gfs2_inode *ip, u32 mtype, u64 num,
+ struct buffer_head **bhp)
{
struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
struct gfs2_glock *gl = ip->i_gl;
struct buffer_head *bh;
int ret = 0;
- u32 mtype = height ? GFS2_METATYPE_IN : GFS2_METATYPE_DI;
int rahead = 0;
if (num == ip->i_no_addr)
diff --git a/fs/gfs2/meta_io.h b/fs/gfs2/meta_io.h
index 4a8c01929b79..21880d72081a 100644
--- a/fs/gfs2/meta_io.h
+++ b/fs/gfs2/meta_io.h
@@ -61,13 +61,13 @@ enum {
extern void gfs2_remove_from_journal(struct buffer_head *bh, int meta);
extern void gfs2_journal_wipe(struct gfs2_inode *ip, u64 bstart, u32 blen);
-extern int gfs2_meta_indirect_buffer(struct gfs2_inode *ip, int height, u64 num,
- struct buffer_head **bhp);
+extern int gfs2_meta_buffer(struct gfs2_inode *ip, u32 mtype, u64 num,
+ struct buffer_head **bhp);
static inline int gfs2_meta_inode_buffer(struct gfs2_inode *ip,
struct buffer_head **bhp)
{
- return gfs2_meta_indirect_buffer(ip, 0, ip->i_no_addr, bhp);
+ return gfs2_meta_buffer(ip, GFS2_METATYPE_DI, ip->i_no_addr, bhp);
}
struct buffer_head *gfs2_meta_ra(struct gfs2_glock *gl, u64 dblock, u32 extlen);
--
2.26.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Cluster-devel] [PATCH 2/4] gfs2: Turn gfs2_extent_map into gfs2_{get, alloc}_extent
2021-04-01 9:18 ` [Cluster-devel] [PATCH 2/4] gfs2: Turn gfs2_extent_map into gfs2_{get, alloc}_extent Andreas Gruenbacher
@ 2021-04-01 9:45 ` Andrew Price
2021-04-01 10:12 ` Andreas Gruenbacher
0 siblings, 1 reply; 8+ messages in thread
From: Andrew Price @ 2021-04-01 9:45 UTC (permalink / raw)
To: cluster-devel.redhat.com
On 01/04/2021 10:18, Andreas Gruenbacher wrote:
> Convert gfs2_extent_map to iomap and split it into gfs2_get_extent and
> gfs2_alloc_extent. Instead of hardcoding the extent size, pass it in
> via the extlen parameter.
>
> Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
> ---
> fs/gfs2/bmap.c | 59 ++++++++++++++++++++++++++++++----------------
> fs/gfs2/bmap.h | 6 +++--
> fs/gfs2/dir.c | 13 +++++-----
> fs/gfs2/quota.c | 4 ++--
> fs/gfs2/recovery.c | 4 ++--
> 5 files changed, 53 insertions(+), 33 deletions(-)
>
> diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
> index cc12dc0d6955..ac959a99ea81 100644
> --- a/fs/gfs2/bmap.c
> +++ b/fs/gfs2/bmap.c
> @@ -1320,28 +1320,47 @@ int gfs2_block_map(struct inode *inode, sector_t lblock,
> return ret;
> }
>
> -/*
> - * Deprecated: do not use in new code
> - */
> -int gfs2_extent_map(struct inode *inode, u64 lblock, int *new, u64 *dblock, unsigned *extlen)
> +int gfs2_get_extent(struct inode *inode, u64 lblock, u64 *dblock,
> + unsigned int *extlen)
> {
> - struct buffer_head bh = { .b_state = 0, .b_blocknr = 0 };
> + unsigned int blkbits = inode->i_blkbits;
> + struct iomap iomap = { };
> + unsigned int len;
> int ret;
> - int create = *new;
> -
> - BUG_ON(!extlen);
> - BUG_ON(!dblock);
> - BUG_ON(!new);
> -
> - bh.b_size = BIT(inode->i_blkbits + (create ? 0 : 5));
> - ret = gfs2_block_map(inode, lblock, &bh, create);
> - *extlen = bh.b_size >> inode->i_blkbits;
> - *dblock = bh.b_blocknr;
> - if (buffer_new(&bh))
> - *new = 1;
> - else
> - *new = 0;
> - return ret;
> +
> + ret = gfs2_iomap_get(inode, lblock << blkbits, *extlen << blkbits,
> + &iomap);
> + if (ret)
> + return ret;
> + if (iomap.type != IOMAP_MAPPED)
> + return -EIO;
> + *dblock = iomap.addr >> blkbits;
> + len = iomap.length >> blkbits;
> + if (len < *extlen)
> + *extlen = len;
> + return 0;
> +}
> +
> +int gfs2_alloc_extent(struct inode *inode, u64 lblock, u64 *dblock,
> + unsigned int *extlen, bool *new)
> +{
> + unsigned int blkbits = inode->i_blkbits;
> + struct iomap iomap = { };
> + unsigned int len;
> + int ret;
> +
> + ret = gfs2_iomap_alloc(inode, lblock << blkbits, *extlen << blkbits,
> + &iomap);
> + if (ret)
> + return ret;
> + if (iomap.type != IOMAP_MAPPED)
> + return -EIO;
> + *dblock = iomap.addr >> blkbits;
> + len = iomap.length >> blkbits;
> + if (len < *extlen)
> + *extlen = len;
> + *new = iomap.flags & IOMAP_F_NEW;
As *new is bool, shouldn't this be !!(iomap.flags & IOMAP_F_NEW) or similar?
Otherwise, the set looks good to me.
Andy
> + return 0;
> }
>
> /*
> diff --git a/fs/gfs2/bmap.h b/fs/gfs2/bmap.h
> index c63efee8aaa4..67ef7cf7fdac 100644
> --- a/fs/gfs2/bmap.h
> +++ b/fs/gfs2/bmap.h
> @@ -53,8 +53,10 @@ extern int gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length,
> struct iomap *iomap);
> extern int gfs2_iomap_alloc(struct inode *inode, loff_t pos, loff_t length,
> struct iomap *iomap);
> -extern int gfs2_extent_map(struct inode *inode, u64 lblock, int *new,
> - u64 *dblock, unsigned *extlen);
> +extern int gfs2_get_extent(struct inode *inode, u64 lblock, u64 *dblock,
> + unsigned int *extlen);
> +extern int gfs2_alloc_extent(struct inode *inode, u64 lblock, u64 *dblock,
> + unsigned *extlen, bool *new);
> extern int gfs2_setattr_size(struct inode *inode, u64 size);
> extern void gfs2_trim_blocks(struct inode *inode);
> extern int gfs2_truncatei_resume(struct gfs2_inode *ip);
> diff --git a/fs/gfs2/dir.c b/fs/gfs2/dir.c
> index c0f2875c946c..4517ffb7c13d 100644
> --- a/fs/gfs2/dir.c
> +++ b/fs/gfs2/dir.c
> @@ -159,7 +159,7 @@ static int gfs2_dir_write_data(struct gfs2_inode *ip, const char *buf,
> unsigned int o;
> int copied = 0;
> int error = 0;
> - int new = 0;
> + bool new = false;
>
> if (!size)
> return 0;
> @@ -189,9 +189,9 @@ static int gfs2_dir_write_data(struct gfs2_inode *ip, const char *buf,
> amount = sdp->sd_sb.sb_bsize - o;
>
> if (!extlen) {
> - new = 1;
> - error = gfs2_extent_map(&ip->i_inode, lblock, &new,
> - &dblock, &extlen);
> + extlen = 1;
> + error = gfs2_alloc_extent(&ip->i_inode, lblock, &dblock,
> + &extlen, &new);
> if (error)
> goto fail;
> error = -EIO;
> @@ -286,15 +286,14 @@ static int gfs2_dir_read_data(struct gfs2_inode *ip, __be64 *buf,
> while (copied < size) {
> unsigned int amount;
> struct buffer_head *bh;
> - int new;
>
> amount = size - copied;
> if (amount > sdp->sd_sb.sb_bsize - o)
> amount = sdp->sd_sb.sb_bsize - o;
>
> if (!extlen) {
> - new = 0;
> - error = gfs2_extent_map(&ip->i_inode, lblock, &new,
> + extlen = 32;
> + error = gfs2_get_extent(&ip->i_inode, lblock,
> &dblock, &extlen);
> if (error || !dblock)
> goto fail;
> diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c
> index 6e173ae378c4..9b1aca7e1264 100644
> --- a/fs/gfs2/quota.c
> +++ b/fs/gfs2/quota.c
> @@ -1375,8 +1375,8 @@ int gfs2_quota_init(struct gfs2_sbd *sdp)
> unsigned int y;
>
> if (!extlen) {
> - int new = 0;
> - error = gfs2_extent_map(&ip->i_inode, x, &new, &dblock, &extlen);
> + extlen = 32;
> + error = gfs2_get_extent(&ip->i_inode, x, &dblock, &extlen);
> if (error)
> goto fail;
> }
> diff --git a/fs/gfs2/recovery.c b/fs/gfs2/recovery.c
> index 282173774005..4ab4cdbf774a 100644
> --- a/fs/gfs2/recovery.c
> +++ b/fs/gfs2/recovery.c
> @@ -34,12 +34,12 @@ int gfs2_replay_read_block(struct gfs2_jdesc *jd, unsigned int blk,
> {
> struct gfs2_inode *ip = GFS2_I(jd->jd_inode);
> struct gfs2_glock *gl = ip->i_gl;
> - int new = 0;
> u64 dblock;
> u32 extlen;
> int error;
>
> - error = gfs2_extent_map(&ip->i_inode, blk, &new, &dblock, &extlen);
> + extlen = 32;
> + error = gfs2_get_extent(&ip->i_inode, blk, &dblock, &extlen);
> if (error)
> return error;
> if (!dblock) {
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Cluster-devel] [PATCH 2/4] gfs2: Turn gfs2_extent_map into gfs2_{get, alloc}_extent
2021-04-01 9:45 ` Andrew Price
@ 2021-04-01 10:12 ` Andreas Gruenbacher
0 siblings, 0 replies; 8+ messages in thread
From: Andreas Gruenbacher @ 2021-04-01 10:12 UTC (permalink / raw)
To: cluster-devel.redhat.com
On Thu, Apr 1, 2021 at 11:46 AM Andrew Price <anprice@redhat.com> wrote:
> On 01/04/2021 10:18, Andreas Gruenbacher wrote:
> > Convert gfs2_extent_map to iomap and split it into gfs2_get_extent and
> > gfs2_alloc_extent. Instead of hardcoding the extent size, pass it in
> > via the extlen parameter.
> >
> > Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
> > ---
> > fs/gfs2/bmap.c | 59 ++++++++++++++++++++++++++++++----------------
> > fs/gfs2/bmap.h | 6 +++--
> > fs/gfs2/dir.c | 13 +++++-----
> > fs/gfs2/quota.c | 4 ++--
> > fs/gfs2/recovery.c | 4 ++--
> > 5 files changed, 53 insertions(+), 33 deletions(-)
> >
> > diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c
> > index cc12dc0d6955..ac959a99ea81 100644
> > --- a/fs/gfs2/bmap.c
> > +++ b/fs/gfs2/bmap.c
> > @@ -1320,28 +1320,47 @@ int gfs2_block_map(struct inode *inode, sector_t lblock,
> > return ret;
> > }
> >
> > -/*
> > - * Deprecated: do not use in new code
> > - */
> > -int gfs2_extent_map(struct inode *inode, u64 lblock, int *new, u64 *dblock, unsigned *extlen)
> > +int gfs2_get_extent(struct inode *inode, u64 lblock, u64 *dblock,
> > + unsigned int *extlen)
> > {
> > - struct buffer_head bh = { .b_state = 0, .b_blocknr = 0 };
> > + unsigned int blkbits = inode->i_blkbits;
> > + struct iomap iomap = { };
> > + unsigned int len;
> > int ret;
> > - int create = *new;
> > -
> > - BUG_ON(!extlen);
> > - BUG_ON(!dblock);
> > - BUG_ON(!new);
> > -
> > - bh.b_size = BIT(inode->i_blkbits + (create ? 0 : 5));
> > - ret = gfs2_block_map(inode, lblock, &bh, create);
> > - *extlen = bh.b_size >> inode->i_blkbits;
> > - *dblock = bh.b_blocknr;
> > - if (buffer_new(&bh))
> > - *new = 1;
> > - else
> > - *new = 0;
> > - return ret;
> > +
> > + ret = gfs2_iomap_get(inode, lblock << blkbits, *extlen << blkbits,
> > + &iomap);
> > + if (ret)
> > + return ret;
> > + if (iomap.type != IOMAP_MAPPED)
> > + return -EIO;
> > + *dblock = iomap.addr >> blkbits;
> > + len = iomap.length >> blkbits;
> > + if (len < *extlen)
> > + *extlen = len;
> > + return 0;
> > +}
> > +
> > +int gfs2_alloc_extent(struct inode *inode, u64 lblock, u64 *dblock,
> > + unsigned int *extlen, bool *new)
> > +{
> > + unsigned int blkbits = inode->i_blkbits;
> > + struct iomap iomap = { };
> > + unsigned int len;
> > + int ret;
> > +
> > + ret = gfs2_iomap_alloc(inode, lblock << blkbits, *extlen << blkbits,
> > + &iomap);
> > + if (ret)
> > + return ret;
> > + if (iomap.type != IOMAP_MAPPED)
> > + return -EIO;
> > + *dblock = iomap.addr >> blkbits;
> > + len = iomap.length >> blkbits;
> > + if (len < *extlen)
> > + *extlen = len;
> > + *new = iomap.flags & IOMAP_F_NEW;
>
> As *new is bool, shouldn't this be !!(iomap.flags & IOMAP_F_NEW) or similar?
That's implied with type bool (but not with integer types). For example,
(bool)(1L << (8 * sizeof(long) - 1))
is always 1.
> Otherwise, the set looks good to me.
>
> Andy
>
> > + return 0;
> > }
> >
> > /*
> > diff --git a/fs/gfs2/bmap.h b/fs/gfs2/bmap.h
> > index c63efee8aaa4..67ef7cf7fdac 100644
> > --- a/fs/gfs2/bmap.h
> > +++ b/fs/gfs2/bmap.h
> > @@ -53,8 +53,10 @@ extern int gfs2_iomap_get(struct inode *inode, loff_t pos, loff_t length,
> > struct iomap *iomap);
> > extern int gfs2_iomap_alloc(struct inode *inode, loff_t pos, loff_t length,
> > struct iomap *iomap);
> > -extern int gfs2_extent_map(struct inode *inode, u64 lblock, int *new,
> > - u64 *dblock, unsigned *extlen);
> > +extern int gfs2_get_extent(struct inode *inode, u64 lblock, u64 *dblock,
> > + unsigned int *extlen);
> > +extern int gfs2_alloc_extent(struct inode *inode, u64 lblock, u64 *dblock,
> > + unsigned *extlen, bool *new);
> > extern int gfs2_setattr_size(struct inode *inode, u64 size);
> > extern void gfs2_trim_blocks(struct inode *inode);
> > extern int gfs2_truncatei_resume(struct gfs2_inode *ip);
> > diff --git a/fs/gfs2/dir.c b/fs/gfs2/dir.c
> > index c0f2875c946c..4517ffb7c13d 100644
> > --- a/fs/gfs2/dir.c
> > +++ b/fs/gfs2/dir.c
> > @@ -159,7 +159,7 @@ static int gfs2_dir_write_data(struct gfs2_inode *ip, const char *buf,
> > unsigned int o;
> > int copied = 0;
> > int error = 0;
> > - int new = 0;
> > + bool new = false;
> >
> > if (!size)
> > return 0;
> > @@ -189,9 +189,9 @@ static int gfs2_dir_write_data(struct gfs2_inode *ip, const char *buf,
> > amount = sdp->sd_sb.sb_bsize - o;
> >
> > if (!extlen) {
> > - new = 1;
> > - error = gfs2_extent_map(&ip->i_inode, lblock, &new,
> > - &dblock, &extlen);
> > + extlen = 1;
> > + error = gfs2_alloc_extent(&ip->i_inode, lblock, &dblock,
> > + &extlen, &new);
> > if (error)
> > goto fail;
> > error = -EIO;
> > @@ -286,15 +286,14 @@ static int gfs2_dir_read_data(struct gfs2_inode *ip, __be64 *buf,
> > while (copied < size) {
> > unsigned int amount;
> > struct buffer_head *bh;
> > - int new;
> >
> > amount = size - copied;
> > if (amount > sdp->sd_sb.sb_bsize - o)
> > amount = sdp->sd_sb.sb_bsize - o;
> >
> > if (!extlen) {
> > - new = 0;
> > - error = gfs2_extent_map(&ip->i_inode, lblock, &new,
> > + extlen = 32;
> > + error = gfs2_get_extent(&ip->i_inode, lblock,
> > &dblock, &extlen);
> > if (error || !dblock)
> > goto fail;
> > diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c
> > index 6e173ae378c4..9b1aca7e1264 100644
> > --- a/fs/gfs2/quota.c
> > +++ b/fs/gfs2/quota.c
> > @@ -1375,8 +1375,8 @@ int gfs2_quota_init(struct gfs2_sbd *sdp)
> > unsigned int y;
> >
> > if (!extlen) {
> > - int new = 0;
> > - error = gfs2_extent_map(&ip->i_inode, x, &new, &dblock, &extlen);
> > + extlen = 32;
> > + error = gfs2_get_extent(&ip->i_inode, x, &dblock, &extlen);
> > if (error)
> > goto fail;
> > }
> > diff --git a/fs/gfs2/recovery.c b/fs/gfs2/recovery.c
> > index 282173774005..4ab4cdbf774a 100644
> > --- a/fs/gfs2/recovery.c
> > +++ b/fs/gfs2/recovery.c
> > @@ -34,12 +34,12 @@ int gfs2_replay_read_block(struct gfs2_jdesc *jd, unsigned int blk,
> > {
> > struct gfs2_inode *ip = GFS2_I(jd->jd_inode);
> > struct gfs2_glock *gl = ip->i_gl;
> > - int new = 0;
> > u64 dblock;
> > u32 extlen;
> > int error;
> >
> > - error = gfs2_extent_map(&ip->i_inode, blk, &new, &dblock, &extlen);
> > + extlen = 32;
> > + error = gfs2_get_extent(&ip->i_inode, blk, &dblock, &extlen);
> > if (error)
> > return error;
> > if (!dblock) {
> >
>
Thanks,
Andreas
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Cluster-devel] [PATCH 1/4] gfs2: Add new gfs2_iomap_get helper
2021-04-01 9:18 ` [Cluster-devel] [PATCH 1/4] gfs2: Add new gfs2_iomap_get helper Andreas Gruenbacher
@ 2021-04-01 13:58 ` Bob Peterson
0 siblings, 0 replies; 8+ messages in thread
From: Bob Peterson @ 2021-04-01 13:58 UTC (permalink / raw)
To: cluster-devel.redhat.com
----- Original Message -----
> 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 <agruenba@redhat.com>
Reviewed-by: Bob Peterson <rpeterso@redhat.com>
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2021-04-01 13:58 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-01 9:18 [Cluster-devel] [PATCH 0/4] gfs2: Various cleanups Andreas Gruenbacher
2021-04-01 9:18 ` [Cluster-devel] [PATCH 1/4] gfs2: Add new gfs2_iomap_get helper Andreas Gruenbacher
2021-04-01 13:58 ` Bob Peterson
2021-04-01 9:18 ` [Cluster-devel] [PATCH 2/4] gfs2: Turn gfs2_extent_map into gfs2_{get, alloc}_extent Andreas Gruenbacher
2021-04-01 9:45 ` Andrew Price
2021-04-01 10:12 ` Andreas Gruenbacher
2021-04-01 9:18 ` [Cluster-devel] [PATCH 3/4] gfs2: Replace gfs2_lblk_to_dblk with gfs2_get_extent Andreas Gruenbacher
2021-04-01 9:18 ` [Cluster-devel] [PATCH 4/4] gfs2: Turn gfs2_meta_indirect_buffer into gfs2_meta_buffer Andreas Gruenbacher
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.