aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarrick J. Wong <darrick.wong@oracle.com>2016-09-18 20:24:36 -0400
committerDave Chinner <david@fromorbit.com>2016-09-18 20:24:36 -0400
commita1d46cffaf40e04acb0ecab14980ece3ef1ab933 (patch)
treec5ff51f2ef4c4e235eb2ab5bbd2d8f868dba8e94
parentcd00158ce34d6e2c42d8892e8499779b8ac1d2bf (diff)
xfs: remove xfs_btree_bigkey
Remove the xfs_btree_bigkey mess and simply make xfs_btree_key big enough to hold both keys in-core. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Dave Chinner <david@fromorbit.com>
-rw-r--r--fs/xfs/libxfs/xfs_btree.c12
-rw-r--r--fs/xfs/libxfs/xfs_btree.h24
2 files changed, 12 insertions, 24 deletions
diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c
index 08569792fe20..7be8d9cda2b6 100644
--- a/fs/xfs/libxfs/xfs_btree.c
+++ b/fs/xfs/libxfs/xfs_btree.c
@@ -2070,7 +2070,7 @@ __xfs_btree_updkeys(
2070 struct xfs_buf *bp0, 2070 struct xfs_buf *bp0,
2071 bool force_all) 2071 bool force_all)
2072{ 2072{
2073 union xfs_btree_bigkey key; /* keys from current level */ 2073 union xfs_btree_key key; /* keys from current level */
2074 union xfs_btree_key *lkey; /* keys from the next level up */ 2074 union xfs_btree_key *lkey; /* keys from the next level up */
2075 union xfs_btree_key *hkey; 2075 union xfs_btree_key *hkey;
2076 union xfs_btree_key *nlkey; /* keys from the next level up */ 2076 union xfs_btree_key *nlkey; /* keys from the next level up */
@@ -2086,7 +2086,7 @@ __xfs_btree_updkeys(
2086 2086
2087 trace_xfs_btree_updkeys(cur, level, bp0); 2087 trace_xfs_btree_updkeys(cur, level, bp0);
2088 2088
2089 lkey = (union xfs_btree_key *)&key; 2089 lkey = &key;
2090 hkey = xfs_btree_high_key_from_key(cur, lkey); 2090 hkey = xfs_btree_high_key_from_key(cur, lkey);
2091 xfs_btree_get_keys(cur, block, lkey); 2091 xfs_btree_get_keys(cur, block, lkey);
2092 for (level++; level < cur->bc_nlevels; level++) { 2092 for (level++; level < cur->bc_nlevels; level++) {
@@ -3226,7 +3226,7 @@ xfs_btree_insrec(
3226 struct xfs_buf *bp; /* buffer for block */ 3226 struct xfs_buf *bp; /* buffer for block */
3227 union xfs_btree_ptr nptr; /* new block ptr */ 3227 union xfs_btree_ptr nptr; /* new block ptr */
3228 struct xfs_btree_cur *ncur; /* new btree cursor */ 3228 struct xfs_btree_cur *ncur; /* new btree cursor */
3229 union xfs_btree_bigkey nkey; /* new block key */ 3229 union xfs_btree_key nkey; /* new block key */
3230 union xfs_btree_key *lkey; 3230 union xfs_btree_key *lkey;
3231 int optr; /* old key/record index */ 3231 int optr; /* old key/record index */
3232 int ptr; /* key/record index */ 3232 int ptr; /* key/record index */
@@ -3241,7 +3241,7 @@ xfs_btree_insrec(
3241 XFS_BTREE_TRACE_ARGIPR(cur, level, *ptrp, &rec); 3241 XFS_BTREE_TRACE_ARGIPR(cur, level, *ptrp, &rec);
3242 3242
3243 ncur = NULL; 3243 ncur = NULL;
3244 lkey = (union xfs_btree_key *)&nkey; 3244 lkey = &nkey;
3245 3245
3246 /* 3246 /*
3247 * If we have an external root pointer, and we've made it to the 3247 * If we have an external root pointer, and we've made it to the
@@ -3444,14 +3444,14 @@ xfs_btree_insert(
3444 union xfs_btree_ptr nptr; /* new block number (split result) */ 3444 union xfs_btree_ptr nptr; /* new block number (split result) */
3445 struct xfs_btree_cur *ncur; /* new cursor (split result) */ 3445 struct xfs_btree_cur *ncur; /* new cursor (split result) */
3446 struct xfs_btree_cur *pcur; /* previous level's cursor */ 3446 struct xfs_btree_cur *pcur; /* previous level's cursor */
3447 union xfs_btree_bigkey bkey; /* key of block to insert */ 3447 union xfs_btree_key bkey; /* key of block to insert */
3448 union xfs_btree_key *key; 3448 union xfs_btree_key *key;
3449 union xfs_btree_rec rec; /* record to insert */ 3449 union xfs_btree_rec rec; /* record to insert */
3450 3450
3451 level = 0; 3451 level = 0;
3452 ncur = NULL; 3452 ncur = NULL;
3453 pcur = cur; 3453 pcur = cur;
3454 key = (union xfs_btree_key *)&bkey; 3454 key = &bkey;
3455 3455
3456 xfs_btree_set_ptr_null(cur, &nptr); 3456 xfs_btree_set_ptr_null(cur, &nptr);
3457 3457
diff --git a/fs/xfs/libxfs/xfs_btree.h b/fs/xfs/libxfs/xfs_btree.h
index 04d0865e5e6d..f41a4cfff740 100644
--- a/fs/xfs/libxfs/xfs_btree.h
+++ b/fs/xfs/libxfs/xfs_btree.h
@@ -37,30 +37,18 @@ union xfs_btree_ptr {
37 __be64 l; /* long form ptr */ 37 __be64 l; /* long form ptr */
38}; 38};
39 39
40union xfs_btree_key {
41 struct xfs_bmbt_key bmbt;
42 xfs_bmdr_key_t bmbr; /* bmbt root block */
43 xfs_alloc_key_t alloc;
44 struct xfs_inobt_key inobt;
45 struct xfs_rmap_key rmap;
46};
47
48/* 40/*
49 * In-core key that holds both low and high keys for overlapped btrees. 41 * The in-core btree key. Overlapping btrees actually store two keys
50 * The two keys are packed next to each other on disk, so do the same 42 * per pointer, so we reserve enough memory to hold both. The __*bigkey
51 * in memory. Preserve the existing xfs_btree_key as a single key to 43 * items should never be accessed directly.
52 * avoid the mental model breakage that would happen if we passed a
53 * bigkey into a function that operates on a single key.
54 */ 44 */
55union xfs_btree_bigkey { 45union xfs_btree_key {
56 struct xfs_bmbt_key bmbt; 46 struct xfs_bmbt_key bmbt;
57 xfs_bmdr_key_t bmbr; /* bmbt root block */ 47 xfs_bmdr_key_t bmbr; /* bmbt root block */
58 xfs_alloc_key_t alloc; 48 xfs_alloc_key_t alloc;
59 struct xfs_inobt_key inobt; 49 struct xfs_inobt_key inobt;
60 struct { 50 struct xfs_rmap_key rmap;
61 struct xfs_rmap_key rmap; 51 struct xfs_rmap_key __rmap_bigkey[2];
62 struct xfs_rmap_key rmap_hi;
63 };
64}; 52};
65 53
66union xfs_btree_rec { 54union xfs_btree_rec {