From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: david@fromorbit.com, darrick.wong@oracle.com
Cc: xfs@oss.sgi.com
Subject: [PATCH 03/76] libxfs: refactor the btree size calculator code
Date: Sat, 19 Dec 2015 00:56:42 -0800 [thread overview]
Message-ID: <20151219085642.12713.80467.stgit@birch.djwong.org> (raw)
In-Reply-To: <20151219085622.12713.88678.stgit@birch.djwong.org>
Create a macro to generate btree height calculator functions.
This will be used (much) later when we get to the refcount
btree.
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
---
fs/xfs/libxfs/xfs_bmap.c | 18 +-----------------
fs/xfs/libxfs/xfs_bmap_btree.c | 2 ++
fs/xfs/libxfs/xfs_bmap_btree.h | 2 ++
fs/xfs/libxfs/xfs_inode_fork.c | 1 +
fs/xfs/libxfs/xfs_shared.h | 29 +++++++++++++++++++++++++++++
5 files changed, 35 insertions(+), 17 deletions(-)
diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
index 119c242..2386377 100644
--- a/fs/xfs/libxfs/xfs_bmap.c
+++ b/fs/xfs/libxfs/xfs_bmap.c
@@ -180,25 +180,9 @@ xfs_bmap_worst_indlen(
xfs_inode_t *ip, /* incore inode pointer */
xfs_filblks_t len) /* delayed extent length */
{
- int level; /* btree level number */
- int maxrecs; /* maximum record count at this level */
- xfs_mount_t *mp; /* mount structure */
xfs_filblks_t rval; /* return value */
- mp = ip->i_mount;
- maxrecs = mp->m_bmap_dmxr[0];
- for (level = 0, rval = 0;
- level < XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK);
- level++) {
- len += maxrecs - 1;
- do_div(len, maxrecs);
- rval += len;
- if (len == 1)
- return rval + XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK) -
- level - 1;
- if (level == 0)
- maxrecs = mp->m_bmap_dmxr[1];
- }
+ rval = xfs_bmbt_calc_btree_size(ip->i_mount, len);
return rval;
}
diff --git a/fs/xfs/libxfs/xfs_bmap_btree.c b/fs/xfs/libxfs/xfs_bmap_btree.c
index 6b0cf65..3d947d6 100644
--- a/fs/xfs/libxfs/xfs_bmap_btree.c
+++ b/fs/xfs/libxfs/xfs_bmap_btree.c
@@ -882,3 +882,5 @@ xfs_bmbt_change_owner(
xfs_btree_del_cursor(cur, error ? XFS_BTREE_ERROR : XFS_BTREE_NOERROR);
return error;
}
+
+DEFINE_BTREE_SIZE_FN(bmbt, m_bmap_dmxr, XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK))
diff --git a/fs/xfs/libxfs/xfs_bmap_btree.h b/fs/xfs/libxfs/xfs_bmap_btree.h
index 819a8a4..7165a1b0 100644
--- a/fs/xfs/libxfs/xfs_bmap_btree.h
+++ b/fs/xfs/libxfs/xfs_bmap_btree.h
@@ -140,4 +140,6 @@ extern int xfs_bmbt_change_owner(struct xfs_trans *tp, struct xfs_inode *ip,
extern struct xfs_btree_cur *xfs_bmbt_init_cursor(struct xfs_mount *,
struct xfs_trans *, struct xfs_inode *, int);
+DECLARE_BTREE_SIZE_FN(bmbt);
+
#endif /* __XFS_BMAP_BTREE_H__ */
diff --git a/fs/xfs/libxfs/xfs_inode_fork.c b/fs/xfs/libxfs/xfs_inode_fork.c
index 0defbd0..46ea657 100644
--- a/fs/xfs/libxfs/xfs_inode_fork.c
+++ b/fs/xfs/libxfs/xfs_inode_fork.c
@@ -19,6 +19,7 @@
#include "xfs.h"
#include "xfs_fs.h"
+#include "xfs_shared.h"
#include "xfs_format.h"
#include "xfs_log_format.h"
#include "xfs_trans_resv.h"
diff --git a/fs/xfs/libxfs/xfs_shared.h b/fs/xfs/libxfs/xfs_shared.h
index 5be5297..544d0e9 100644
--- a/fs/xfs/libxfs/xfs_shared.h
+++ b/fs/xfs/libxfs/xfs_shared.h
@@ -234,4 +234,33 @@ bool xfs_symlink_hdr_ok(xfs_ino_t ino, uint32_t offset,
void xfs_symlink_local_to_remote(struct xfs_trans *tp, struct xfs_buf *bp,
struct xfs_inode *ip, struct xfs_ifork *ifp);
+/* btree size calculator templates */
+#define DECLARE_BTREE_SIZE_FN(btree) \
+xfs_filblks_t xfs_##btree##_calc_btree_size(struct xfs_mount *mp, \
+ unsigned long len);
+
+#define DEFINE_BTREE_SIZE_FN(btree, limitfield, maxlevels) \
+xfs_filblks_t \
+xfs_##btree##_calc_btree_size( \
+ struct xfs_mount *mp, \
+ unsigned long len) \
+{ \
+ int level; \
+ int maxrecs; \
+ xfs_filblks_t rval; \
+\
+ maxrecs = mp->limitfield[0]; \
+ for (level = 0, rval = 0; level < maxlevels; level++) { \
+ len += maxrecs - 1; \
+ do_div(len, maxrecs); \
+ rval += len; \
+ if (len == 1) \
+ return rval + maxlevels - \
+ level - 1; \
+ if (level == 0) \
+ maxrecs = mp->limitfield[1]; \
+ } \
+ return rval; \
+}
+
#endif /* __XFS_SHARED_H__ */
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2015-12-19 8:56 UTC|newest]
Thread overview: 102+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-19 8:56 [RFCv4 00/76] xfs: add reverse-mapping, reflink, and dedupe support Darrick J. Wong
2015-12-19 8:56 ` [PATCH 01/76] libxfs: make xfs_alloc_fix_freelist non-static Darrick J. Wong
2015-12-19 8:56 ` [PATCH 02/76] xfs: fix log ticket type printing Darrick J. Wong
2016-01-03 12:13 ` Christoph Hellwig
2016-01-03 21:29 ` Dave Chinner
2016-01-04 19:57 ` Darrick J. Wong
2015-12-19 8:56 ` Darrick J. Wong [this message]
2015-12-20 20:39 ` [PATCH 03/76] libxfs: refactor the btree size calculator code Dave Chinner
2016-01-04 22:06 ` Darrick J. Wong
2015-12-19 8:56 ` [PATCH 04/76] libxfs: use a convenience variable instead of open-coding the fork Darrick J. Wong
2015-12-19 8:56 ` [PATCH 05/76] libxfs: pack the agfl header structure so XFS_AGFL_SIZE is correct Darrick J. Wong
2016-01-03 12:15 ` Christoph Hellwig
2016-01-04 22:12 ` Darrick J. Wong
2016-01-04 23:23 ` Darrick J. Wong
2016-01-04 23:51 ` Dave Chinner
2015-12-19 8:57 ` [PATCH 06/76] xfs: introduce rmap btree definitions Darrick J. Wong
2015-12-19 8:57 ` [PATCH 07/76] xfs: add rmap btree stats infrastructure Darrick J. Wong
2015-12-19 8:57 ` [PATCH 08/76] xfs: rmap btree add more reserved blocks Darrick J. Wong
2015-12-19 8:57 ` [PATCH 09/76] xfs: add owner field to extent allocation and freeing Darrick J. Wong
2015-12-19 8:57 ` [PATCH 10/76] xfs: add extended " Darrick J. Wong
2015-12-19 8:57 ` [PATCH 11/76] xfs: introduce rmap extent operation stubs Darrick J. Wong
2015-12-19 8:57 ` [PATCH 12/76] xfs: extend rmap extent operation stubs to take full owner info Darrick J. Wong
2015-12-19 8:57 ` [PATCH 13/76] xfs: define the on-disk rmap btree format Darrick J. Wong
2015-12-19 8:57 ` [PATCH 14/76] xfs: enhance " Darrick J. Wong
2015-12-19 8:58 ` [PATCH 15/76] xfs: add rmap btree growfs support Darrick J. Wong
2015-12-19 8:58 ` [PATCH 16/76] xfs: enhance " Darrick J. Wong
2015-12-19 8:58 ` [PATCH 17/76] xfs: rmap btree transaction reservations Darrick J. Wong
2015-12-19 8:58 ` [PATCH 18/76] xfs: rmap btree requires more reserved free space Darrick J. Wong
2015-12-19 8:58 ` [PATCH 19/76] libxfs: fix min freelist length calculation Darrick J. Wong
2015-12-19 8:58 ` [PATCH 20/76] xfs: add rmap btree operations Darrick J. Wong
2015-12-19 8:58 ` [PATCH 21/76] xfs: enhance " Darrick J. Wong
2015-12-19 8:58 ` [PATCH 22/76] xfs: add an extent to the rmap btree Darrick J. Wong
2015-12-19 8:58 ` [PATCH 23/76] xfs: add tracepoints for the rmap-mirrors-bmbt functions Darrick J. Wong
2015-12-19 8:58 ` [PATCH 24/76] xfs: teach rmap_alloc how to deal with our larger rmap btree Darrick J. Wong
2015-12-19 8:59 ` [PATCH 25/76] xfs: remove an extent from the " Darrick J. Wong
2015-12-19 8:59 ` [PATCH 26/76] xfs: enhanced " Darrick J. Wong
2015-12-19 8:59 ` [PATCH 27/76] xfs: add rmap btree insert and delete helpers Darrick J. Wong
2015-12-19 8:59 ` [PATCH 28/76] xfs: piggyback rmapbt update intents in the bmap free structure Darrick J. Wong
2015-12-19 8:59 ` [PATCH 29/76] xfs: bmap btree changes should update rmap btree Darrick J. Wong
2015-12-19 8:59 ` [PATCH 30/76] xfs: add rmap btree geometry feature flag Darrick J. Wong
2015-12-19 8:59 ` [PATCH 31/76] xfs: add rmap btree block detection to log recovery Darrick J. Wong
2015-12-19 8:59 ` [PATCH 32/76] xfs: enable the rmap btree functionality Darrick J. Wong
2015-12-19 9:00 ` [PATCH 33/76] xfs: disable XFS_IOC_SWAPEXT when rmap btree is enabled Darrick J. Wong
2015-12-19 9:00 ` [PATCH 34/76] xfs: implement " Darrick J. Wong
2016-01-03 12:17 ` Christoph Hellwig
2016-01-04 23:40 ` Darrick J. Wong
2016-01-05 2:41 ` Dave Chinner
2016-01-07 0:09 ` Darrick J. Wong
2015-12-19 9:00 ` [PATCH 35/76] libxfs: refactor short btree block verification Darrick J. Wong
2016-01-03 12:18 ` Christoph Hellwig
2016-01-03 21:30 ` Dave Chinner
2015-12-19 9:00 ` [PATCH 36/76] xfs: don't update rmapbt when fixing agfl Darrick J. Wong
2015-12-19 9:00 ` [PATCH 37/76] xfs: define tracepoints for refcount btree activities Darrick J. Wong
2015-12-19 9:00 ` [PATCH 38/76] xfs: introduce refcount btree definitions Darrick J. Wong
2015-12-19 9:00 ` [PATCH 39/76] xfs: add refcount btree stats infrastructure Darrick J. Wong
2015-12-19 9:00 ` [PATCH 40/76] xfs: refcount btree add more reserved blocks Darrick J. Wong
2015-12-19 9:00 ` [PATCH 41/76] xfs: define the on-disk refcount btree format Darrick J. Wong
2015-12-19 9:00 ` [PATCH 42/76] xfs: add refcount btree support to growfs Darrick J. Wong
2015-12-19 9:01 ` [PATCH 43/76] xfs: add refcount btree operations Darrick J. Wong
2015-12-19 9:01 ` [PATCH 44/76] libxfs: adjust refcount of an extent of blocks in refcount btree Darrick J. Wong
2015-12-19 9:01 ` [PATCH 45/76] libxfs: adjust refcount when unmapping file blocks Darrick J. Wong
2015-12-19 9:01 ` [PATCH 46/76] xfs: add refcount btree block detection to log recovery Darrick J. Wong
2015-12-19 9:01 ` [PATCH 47/76] xfs: refcount btree requires more reserved space Darrick J. Wong
2015-12-19 9:01 ` [PATCH 48/76] xfs: introduce reflink utility functions Darrick J. Wong
2015-12-19 9:01 ` [PATCH 49/76] xfs: define tracepoints for reflink activities Darrick J. Wong
2015-12-19 9:01 ` [PATCH 50/76] xfs: map an inode's offset to an exact physical block Darrick J. Wong
2015-12-19 9:02 ` [PATCH 51/76] xfs: add reflink feature flag to geometry Darrick J. Wong
2015-12-19 9:02 ` [PATCH 52/76] xfs: don't allow reflinked dir/dev/fifo/socket/pipe files Darrick J. Wong
2015-12-19 9:02 ` [PATCH 53/76] xfs: introduce the CoW fork Darrick J. Wong
2015-12-19 9:02 ` [PATCH 54/76] xfs: support bmapping delalloc extents in " Darrick J. Wong
2015-12-19 9:02 ` [PATCH 55/76] xfs: create delalloc extents in " Darrick J. Wong
2015-12-19 9:02 ` [PATCH 56/76] xfs: support allocating delayed " Darrick J. Wong
2015-12-19 9:02 ` [PATCH 57/76] xfs: allocate " Darrick J. Wong
2016-01-03 12:20 ` Christoph Hellwig
2016-01-05 1:13 ` Darrick J. Wong
2016-01-09 9:59 ` Darrick J. Wong
2015-12-19 9:02 ` [PATCH 58/76] xfs: support removing extents from " Darrick J. Wong
2015-12-19 9:03 ` [PATCH 59/76] xfs: move mappings from cow fork to data fork after copy-write Darrick J. Wong
2015-12-19 9:03 ` [PATCH 60/76] xfs: implement CoW for directio writes Darrick J. Wong
2016-01-08 9:34 ` Darrick J. Wong
2015-12-19 9:03 ` [PATCH 61/76] xfs: copy-on-write reflinked blocks when zeroing ranges of blocks Darrick J. Wong
2015-12-19 9:03 ` [PATCH 62/76] xfs: clear inode reflink flag when freeing blocks Darrick J. Wong
2015-12-19 9:03 ` [PATCH 63/76] xfs: cancel pending CoW reservations when destroying inodes Darrick J. Wong
2015-12-19 9:03 ` [PATCH 64/76] xfs: reflink extents from one file to another Darrick J. Wong
2015-12-19 9:03 ` [PATCH 65/76] xfs: add clone file and clone range ioctls Darrick J. Wong
2015-12-19 9:03 ` [PATCH 66/76] xfs: emulate the btrfs dedupe extent same ioctl Darrick J. Wong
2015-12-19 9:03 ` [PATCH 67/76] xfs: teach fiemap about reflink'd extents Darrick J. Wong
2015-12-19 9:03 ` [PATCH 68/76] xfs: swap inode reflink flags when swapping inode extents Darrick J. Wong
2015-12-19 9:04 ` [PATCH 69/76] xfs: unshare a range of blocks via fallocate Darrick J. Wong
2015-12-19 9:04 ` [PATCH 70/76] xfs: fork shared EOF block when truncating file Darrick J. Wong
2015-12-19 9:04 ` [PATCH 71/76] xfs: support XFS_XFLAG_REFLINK (and FS_NOCOW_FL) on reflink filesystems Darrick J. Wong
2015-12-19 9:04 ` [PATCH 72/76] xfs: recognize the reflink feature bit Darrick J. Wong
2015-12-19 9:04 ` [PATCH 73/76] xfs: use new vfs reflink and dedup function pointers Darrick J. Wong
2015-12-19 9:04 ` [PATCH 74/76] xfs: set up per-AG preallocated block pools Darrick J. Wong
2015-12-19 9:04 ` [PATCH 75/76] xfs: preallocate blocks for worst-case refcount btree expansion Darrick J. Wong
2015-12-19 9:04 ` [PATCH 76/76] xfs: try to prevent failed rmap btree expansion during cow Darrick J. Wong
2015-12-20 14:02 ` [RFCv4 00/76] xfs: add reverse-mapping, reflink, and dedupe support Brian Foster
2016-01-04 23:59 ` Darrick J. Wong
2016-01-05 12:42 ` Brian Foster
2016-01-06 2:04 ` Darrick J. Wong
2016-01-06 3:44 ` Dave Chinner
2016-02-02 23:06 ` Darrick J. Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20151219085642.12713.80467.stgit@birch.djwong.org \
--to=darrick.wong@oracle.com \
--cc=david@fromorbit.com \
--cc=xfs@oss.sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox