summaryrefslogtreecommitdiff
path: root/fs/xfs/libxfs
diff options
context:
space:
mode:
Diffstat (limited to 'fs/xfs/libxfs')
-rw-r--r--fs/xfs/libxfs/xfs_attr.c14
-rw-r--r--fs/xfs/libxfs/xfs_bmap.c5
-rw-r--r--fs/xfs/libxfs/xfs_bmap.h2
-rw-r--r--fs/xfs/libxfs/xfs_btree_mem.c6
-rw-r--r--fs/xfs/libxfs/xfs_dquot_buf.c13
-rw-r--r--fs/xfs/libxfs/xfs_errortag.h6
-rw-r--r--fs/xfs/libxfs/xfs_exchmaps.c1
-rw-r--r--fs/xfs/libxfs/xfs_exchmaps.h3
-rw-r--r--fs/xfs/libxfs/xfs_ialloc.c2
-rw-r--r--fs/xfs/libxfs/xfs_ialloc_btree.c1
-rw-r--r--fs/xfs/libxfs/xfs_ialloc_btree.h5
-rw-r--r--fs/xfs/libxfs/xfs_inode_fork.c4
-rw-r--r--fs/xfs/libxfs/xfs_inode_util.h2
-rw-r--r--fs/xfs/libxfs/xfs_metadir.c32
-rw-r--r--fs/xfs/libxfs/xfs_metadir.h5
-rw-r--r--fs/xfs/libxfs/xfs_parent.h1
-rw-r--r--fs/xfs/libxfs/xfs_refcount_btree.c16
-rw-r--r--fs/xfs/libxfs/xfs_refcount_btree.h26
-rw-r--r--fs/xfs/libxfs/xfs_rmap.c13
-rw-r--r--fs/xfs/libxfs/xfs_rmap_btree.c16
-rw-r--r--fs/xfs/libxfs/xfs_rmap_btree.h26
-rw-r--r--fs/xfs/libxfs/xfs_rtrefcount_btree.c121
-rw-r--r--fs/xfs/libxfs/xfs_rtrefcount_btree.h5
-rw-r--r--fs/xfs/libxfs/xfs_rtrmap_btree.c236
-rw-r--r--fs/xfs/libxfs/xfs_rtrmap_btree.h3
-rw-r--r--fs/xfs/libxfs/xfs_sb.c40
-rw-r--r--fs/xfs/libxfs/xfs_sb.h1
-rw-r--r--fs/xfs/libxfs/xfs_symlink_remote.c8
-rw-r--r--fs/xfs/libxfs/xfs_symlink_remote.h2
-rw-r--r--fs/xfs/libxfs/xfs_trans_resv.c45
-rw-r--r--fs/xfs/libxfs/xfs_trans_space.c6
-rw-r--r--fs/xfs/libxfs/xfs_types.c7
-rw-r--r--fs/xfs/libxfs/xfs_types.h7
33 files changed, 199 insertions, 481 deletions
diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c
index b3f7b2c34ad7..c4bb59633ce8 100644
--- a/fs/xfs/libxfs/xfs_attr.c
+++ b/fs/xfs/libxfs/xfs_attr.c
@@ -59,8 +59,7 @@ STATIC void xfs_attr_restore_rmt_blk(struct xfs_da_args *args);
static int xfs_attr_node_try_addname(struct xfs_attr_intent *attr);
STATIC int xfs_attr_node_addname_find_attr(struct xfs_attr_intent *attr);
STATIC int xfs_attr_node_remove_attr(struct xfs_attr_intent *attr);
-STATIC int xfs_attr_node_lookup(struct xfs_da_args *args,
- struct xfs_da_state *state);
+STATIC int xfs_attr_node_lookup(struct xfs_da_state *state);
int
xfs_inode_hasattr(
@@ -709,7 +708,7 @@ int xfs_attr_node_removename_setup(
int error;
xfs_attr_item_init_da_state(attr);
- error = xfs_attr_node_lookup(args, attr->xattri_da_state);
+ error = xfs_attr_node_lookup(attr->xattri_da_state);
if (error != -EEXIST)
goto out;
error = 0;
@@ -985,7 +984,7 @@ xfs_attr_lookup(
}
state = xfs_da_state_alloc(args);
- error = xfs_attr_node_lookup(args, state);
+ error = xfs_attr_node_lookup(state);
xfs_da_state_free(state);
return error;
}
@@ -1014,7 +1013,7 @@ xfs_attr_add_fork(
if (xfs_inode_has_attr_fork(ip))
goto trans_cancel;
- error = xfs_bmap_add_attrfork(tp, ip, size, rsvd);
+ error = xfs_bmap_add_attrfork(tp, ip, size);
if (error)
goto trans_cancel;
@@ -1386,7 +1385,6 @@ xfs_attr_leaf_get(
/* Return EEXIST if attr is found, or ENOATTR if not. */
STATIC int
xfs_attr_node_lookup(
- struct xfs_da_args *args,
struct xfs_da_state *state)
{
int retval, error;
@@ -1417,7 +1415,7 @@ xfs_attr_node_addname_find_attr(
* to where it should go.
*/
xfs_attr_item_init_da_state(attr);
- error = xfs_attr_node_lookup(args, attr->xattri_da_state);
+ error = xfs_attr_node_lookup(attr->xattri_da_state);
switch (error) {
case -ENOATTR:
if (args->op_flags & XFS_DA_OP_REPLACE)
@@ -1588,7 +1586,7 @@ xfs_attr_node_get(
* Search to see if name exists, and get back a pointer to it.
*/
state = xfs_da_state_alloc(args);
- error = xfs_attr_node_lookup(args, state);
+ error = xfs_attr_node_lookup(state);
if (error != -EEXIST)
goto out_release;
diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
index d64defeda645..ae91f63455c5 100644
--- a/fs/xfs/libxfs/xfs_bmap.c
+++ b/fs/xfs/libxfs/xfs_bmap.c
@@ -1026,8 +1026,7 @@ int /* error code */
xfs_bmap_add_attrfork(
struct xfs_trans *tp,
struct xfs_inode *ip, /* incore inode pointer */
- int size, /* space new attribute needs */
- int rsvd) /* xact may use reserved blks */
+ int size) /* space new attribute needs */
{
struct xfs_mount *mp = tp->t_mountp;
int logflags; /* logging flags */
@@ -6088,7 +6087,7 @@ xfs_bmap_validate_extent_raw(
int whichfork,
struct xfs_bmbt_irec *irec)
{
- if (!xfs_verify_fileext(mp, irec->br_startoff, irec->br_blockcount))
+ if (!xfs_verify_fileext(irec->br_startoff, irec->br_blockcount))
return __this_address;
if (rtfile && whichfork == XFS_DATA_FORK) {
diff --git a/fs/xfs/libxfs/xfs_bmap.h b/fs/xfs/libxfs/xfs_bmap.h
index d5f2729305fa..60f6df4ce057 100644
--- a/fs/xfs/libxfs/xfs_bmap.h
+++ b/fs/xfs/libxfs/xfs_bmap.h
@@ -181,7 +181,7 @@ void xfs_trim_extent(struct xfs_bmbt_irec *irec, xfs_fileoff_t bno,
xfs_filblks_t len);
unsigned int xfs_bmap_compute_attr_offset(struct xfs_mount *mp);
int xfs_bmap_add_attrfork(struct xfs_trans *tp, struct xfs_inode *ip,
- int size, int rsvd);
+ int size);
void xfs_bmap_local_to_extents_empty(struct xfs_trans *tp,
struct xfs_inode *ip, int whichfork);
int xfs_bmap_local_to_extents(struct xfs_trans *tp, struct xfs_inode *ip,
diff --git a/fs/xfs/libxfs/xfs_btree_mem.c b/fs/xfs/libxfs/xfs_btree_mem.c
index 1d83a4251cee..3d5c7a014d4f 100644
--- a/fs/xfs/libxfs/xfs_btree_mem.c
+++ b/fs/xfs/libxfs/xfs_btree_mem.c
@@ -73,9 +73,7 @@ xfbtree_destroy(
/* Compute the number of bytes available for records. */
static inline unsigned int
-xfbtree_rec_bytes(
- struct xfs_mount *mp,
- const struct xfs_btree_ops *ops)
+xfbtree_rec_bytes(void)
{
return XMBUF_BLOCKSIZE - XFS_BTREE_LBLOCK_CRC_LEN;
}
@@ -118,7 +116,7 @@ xfbtree_init(
const struct xfs_btree_ops *ops)
{
unsigned long long owner = xfbt->owner;
- unsigned int blocklen = xfbtree_rec_bytes(mp, ops);
+ unsigned int blocklen = xfbtree_rec_bytes();
unsigned int keyptr_len;
int error;
diff --git a/fs/xfs/libxfs/xfs_dquot_buf.c b/fs/xfs/libxfs/xfs_dquot_buf.c
index 77954d1d924c..6c8a9afdfb1c 100644
--- a/fs/xfs/libxfs/xfs_dquot_buf.c
+++ b/fs/xfs/libxfs/xfs_dquot_buf.c
@@ -454,19 +454,8 @@ xfs_dqinode_metadir_link(
.path = xfs_dqinode_path(type),
.ip = ip,
};
- int error;
- error = xfs_metadir_start_link(&upd);
- if (error)
- return error;
-
- error = xfs_metadir_link(&upd);
- if (error)
- return error;
-
- xfs_trans_log_inode(upd.tp, upd.ip, XFS_ILOG_CORE);
-
- return xfs_metadir_commit(&upd);
+ return xfs_metadir_link_file(&upd);
}
#endif /* __KERNEL__ */
diff --git a/fs/xfs/libxfs/xfs_errortag.h b/fs/xfs/libxfs/xfs_errortag.h
index f0c83f1f0b3b..d14aa289699f 100644
--- a/fs/xfs/libxfs/xfs_errortag.h
+++ b/fs/xfs/libxfs/xfs_errortag.h
@@ -75,7 +75,8 @@
#define XFS_ERRTAG_METAFILE_RESV_CRITICAL 45
#define XFS_ERRTAG_FORCE_ZERO_RANGE 46
#define XFS_ERRTAG_ZONE_RESET 47
-#define XFS_ERRTAG_MAX 48
+#define XFS_ERRTAG_BOUNCE_REREAD 48
+#define XFS_ERRTAG_MAX 49
/*
* Random factors for above tags, 1 means always, 2 means 1/2 time, etc.
@@ -137,7 +138,8 @@ XFS_ERRTAG(WRITE_DELAY_MS, write_delay_ms, 3000) \
XFS_ERRTAG(EXCHMAPS_FINISH_ONE, exchmaps_finish_one, 1) \
XFS_ERRTAG(METAFILE_RESV_CRITICAL, metafile_resv_crit, 4) \
XFS_ERRTAG(FORCE_ZERO_RANGE, force_zero_range, 4) \
-XFS_ERRTAG(ZONE_RESET, zone_reset, 1)
+XFS_ERRTAG(ZONE_RESET, zone_reset, 1) \
+XFS_ERRTAG(BOUNCE_REREAD, bounce_reread, XFS_RANDOM_DEFAULT)
#endif /* XFS_ERRTAG */
#endif /* __XFS_ERRORTAG_H_ */
diff --git a/fs/xfs/libxfs/xfs_exchmaps.c b/fs/xfs/libxfs/xfs_exchmaps.c
index 6a66b6075e0a..ccb97da3765f 100644
--- a/fs/xfs/libxfs/xfs_exchmaps.c
+++ b/fs/xfs/libxfs/xfs_exchmaps.c
@@ -135,7 +135,6 @@ xmi_has_postop_work(const struct xfs_exchmaps_intent *xmi)
/* Check all mappings to make sure we can actually exchange them. */
int
xfs_exchmaps_check_forks(
- struct xfs_mount *mp,
const struct xfs_exchmaps_req *req)
{
struct xfs_ifork *ifp1, *ifp2;
diff --git a/fs/xfs/libxfs/xfs_exchmaps.h b/fs/xfs/libxfs/xfs_exchmaps.h
index fa822dff202a..055b8dbabd5b 100644
--- a/fs/xfs/libxfs/xfs_exchmaps.h
+++ b/fs/xfs/libxfs/xfs_exchmaps.h
@@ -115,8 +115,7 @@ void xfs_exchmaps_upgrade_extent_counts(struct xfs_trans *tp,
int xfs_exchmaps_finish_one(struct xfs_trans *tp,
struct xfs_exchmaps_intent *xmi);
-int xfs_exchmaps_check_forks(struct xfs_mount *mp,
- const struct xfs_exchmaps_req *req);
+int xfs_exchmaps_check_forks(const struct xfs_exchmaps_req *req);
void xfs_exchange_mappings(struct xfs_trans *tp,
const struct xfs_exchmaps_req *req);
diff --git a/fs/xfs/libxfs/xfs_ialloc.c b/fs/xfs/libxfs/xfs_ialloc.c
index 58dac4d505ba..19b513b11692 100644
--- a/fs/xfs/libxfs/xfs_ialloc.c
+++ b/fs/xfs/libxfs/xfs_ialloc.c
@@ -615,7 +615,7 @@ xfs_inobt_insert_sprec(
trace_xfs_irec_merge_post(pag, nrec);
- error = xfs_inobt_rec_check_count(mp, nrec);
+ error = xfs_inobt_rec_check_count(nrec);
if (error)
goto error;
diff --git a/fs/xfs/libxfs/xfs_ialloc_btree.c b/fs/xfs/libxfs/xfs_ialloc_btree.c
index 1376e8630449..1f0bace2f144 100644
--- a/fs/xfs/libxfs/xfs_ialloc_btree.c
+++ b/fs/xfs/libxfs/xfs_ialloc_btree.c
@@ -687,7 +687,6 @@ xfs_inobt_irec_to_allocmask(
*/
int
xfs_inobt_rec_check_count(
- struct xfs_mount *mp,
struct xfs_inobt_rec_incore *rec)
{
int inocount = 0;
diff --git a/fs/xfs/libxfs/xfs_ialloc_btree.h b/fs/xfs/libxfs/xfs_ialloc_btree.h
index 300edf5bc009..e04c63c66f39 100644
--- a/fs/xfs/libxfs/xfs_ialloc_btree.h
+++ b/fs/xfs/libxfs/xfs_ialloc_btree.h
@@ -57,10 +57,9 @@ unsigned int xfs_inobt_maxrecs(struct xfs_mount *mp, unsigned int blocklen,
uint64_t xfs_inobt_irec_to_allocmask(const struct xfs_inobt_rec_incore *irec);
#if defined(DEBUG) || defined(XFS_WARN)
-int xfs_inobt_rec_check_count(struct xfs_mount *,
- struct xfs_inobt_rec_incore *);
+int xfs_inobt_rec_check_count(struct xfs_inobt_rec_incore *);
#else
-#define xfs_inobt_rec_check_count(mp, rec) 0
+#define xfs_inobt_rec_check_count(rec) 0
#endif /* DEBUG */
int xfs_finobt_calc_reserves(struct xfs_perag *perag, struct xfs_trans *tp,
diff --git a/fs/xfs/libxfs/xfs_inode_fork.c b/fs/xfs/libxfs/xfs_inode_fork.c
index 606a36526ce2..486fe7ab8b61 100644
--- a/fs/xfs/libxfs/xfs_inode_fork.c
+++ b/fs/xfs/libxfs/xfs_inode_fork.c
@@ -683,9 +683,7 @@ xfs_ifork_verify_local_data(
break;
}
case S_IFLNK: {
- struct xfs_ifork *ifp = xfs_ifork_ptr(ip, XFS_DATA_FORK);
-
- fa = xfs_symlink_shortform_verify(ifp->if_data, ifp->if_bytes);
+ fa = xfs_symlink_shortform_verify(ip);
break;
}
default:
diff --git a/fs/xfs/libxfs/xfs_inode_util.h b/fs/xfs/libxfs/xfs_inode_util.h
index 060242998a23..e9eac35159c3 100644
--- a/fs/xfs/libxfs/xfs_inode_util.h
+++ b/fs/xfs/libxfs/xfs_inode_util.h
@@ -27,7 +27,7 @@ prid_t xfs_get_initial_prid(struct xfs_inode *dp);
* idmap to NULL. To create a tree root, set pip to NULL.
*/
struct xfs_icreate_args {
- struct mnt_idmap *idmap;
+ const struct mnt_idmap *idmap;
struct xfs_inode *pip; /* parent inode or null */
dev_t rdev;
umode_t mode;
diff --git a/fs/xfs/libxfs/xfs_metadir.c b/fs/xfs/libxfs/xfs_metadir.c
index 7c6b086b73db..79b37cb27273 100644
--- a/fs/xfs/libxfs/xfs_metadir.c
+++ b/fs/xfs/libxfs/xfs_metadir.c
@@ -163,7 +163,7 @@ xfs_metadir_teardown(
trace_xfs_metadir_teardown(upd, error);
if (upd->ppargs) {
- xfs_parent_finish(upd->dp->i_mount, upd->ppargs);
+ xfs_parent_finish(upd->ppargs);
upd->ppargs = NULL;
}
@@ -317,7 +317,7 @@ xfs_metadir_create(
* Begin the process of linking a metadata file by allocating transactions
* and locking whatever resources we're going to need.
*/
-int
+static int
xfs_metadir_start_link(
struct xfs_metadir_update *upd)
{
@@ -364,7 +364,7 @@ out_teardown:
* The path (up to the final component) must already exist, but the final
* component must not already exist.
*/
-int
+static int
xfs_metadir_link(
struct xfs_metadir_update *upd)
{
@@ -409,7 +409,7 @@ xfs_metadir_link(
#endif /* ! __KERNEL__ */
/* Commit a metadir update and unlock/drop all resources. */
-int
+static int
xfs_metadir_commit(
struct xfs_metadir_update *upd)
{
@@ -499,3 +499,27 @@ xfs_metadir_mkdir(
return xfs_metadir_create_file(&upd, S_IFDIR, NULL, NULL, ipp);
}
+
+#ifndef __KERNEL__
+/* Link a metadata file into a metadata directory. */
+int
+xfs_metadir_link_file(
+ struct xfs_metadir_update *upd)
+{
+ int error;
+
+ error = xfs_metadir_start_link(upd);
+ if (error)
+ return error;
+
+ error = xfs_metadir_link(upd);
+ if (error) {
+ xfs_metadir_cancel(upd, error);
+ return error;
+ }
+
+ xfs_trans_log_inode(upd->tp, upd->ip, XFS_ILOG_CORE);
+
+ return xfs_metadir_commit(upd);
+}
+#endif /* ! __KERNEL__ */
diff --git a/fs/xfs/libxfs/xfs_metadir.h b/fs/xfs/libxfs/xfs_metadir.h
index e434b9d1c932..b64f9fc5ca78 100644
--- a/fs/xfs/libxfs/xfs_metadir.h
+++ b/fs/xfs/libxfs/xfs_metadir.h
@@ -38,10 +38,7 @@ int xfs_metadir_create_file(struct xfs_metadir_update *upd, umode_t mode,
xfs_metadir_createfn create, void *priv,
struct xfs_inode **ipp);
-int xfs_metadir_start_link(struct xfs_metadir_update *upd);
-int xfs_metadir_link(struct xfs_metadir_update *upd);
-
-int xfs_metadir_commit(struct xfs_metadir_update *upd);
+int xfs_metadir_link_file(struct xfs_metadir_update *upd);
int xfs_metadir_mkdir(struct xfs_inode *dp, const char *path,
struct xfs_inode **ipp);
diff --git a/fs/xfs/libxfs/xfs_parent.h b/fs/xfs/libxfs/xfs_parent.h
index 8eb4de9c5f1a..1dd3968a78b1 100644
--- a/fs/xfs/libxfs/xfs_parent.h
+++ b/fs/xfs/libxfs/xfs_parent.h
@@ -72,7 +72,6 @@ xfs_parent_start(
/* Finish a parent pointer update by freeing the context object. */
static inline void
xfs_parent_finish(
- struct xfs_mount *mp,
struct xfs_parent_args *ppargs)
{
if (ppargs)
diff --git a/fs/xfs/libxfs/xfs_refcount_btree.c b/fs/xfs/libxfs/xfs_refcount_btree.c
index 7e5f92c1ac56..2c6148a97994 100644
--- a/fs/xfs/libxfs/xfs_refcount_btree.c
+++ b/fs/xfs/libxfs/xfs_refcount_btree.c
@@ -127,7 +127,7 @@ xfs_refcountbt_get_maxrecs(
return cur->bc_mp->m_refc_mxr[level != 0];
}
-STATIC void
+void
xfs_refcountbt_init_key_from_rec(
union xfs_btree_key *key,
const union xfs_btree_rec *rec)
@@ -135,7 +135,7 @@ xfs_refcountbt_init_key_from_rec(
key->refc.rc_startblock = rec->refc.rc_startblock;
}
-STATIC void
+void
xfs_refcountbt_init_high_key_from_rec(
union xfs_btree_key *key,
const union xfs_btree_rec *rec)
@@ -147,7 +147,7 @@ xfs_refcountbt_init_high_key_from_rec(
key->refc.rc_startblock = cpu_to_be32(x);
}
-STATIC void
+void
xfs_refcountbt_init_rec_from_cur(
struct xfs_btree_cur *cur,
union xfs_btree_rec *rec)
@@ -174,7 +174,7 @@ xfs_refcountbt_init_ptr_from_cur(
ptr->s = agf->agf_refcount_root;
}
-STATIC int
+int
xfs_refcountbt_cmp_key_with_cur(
struct xfs_btree_cur *cur,
const union xfs_btree_key *key)
@@ -188,7 +188,7 @@ xfs_refcountbt_cmp_key_with_cur(
return cmp_int(be32_to_cpu(kp->rc_startblock), start);
}
-STATIC int
+int
xfs_refcountbt_cmp_two_keys(
struct xfs_btree_cur *cur,
const union xfs_btree_key *k1,
@@ -283,7 +283,7 @@ const struct xfs_buf_ops xfs_refcountbt_buf_ops = {
.verify_struct = xfs_refcountbt_verify,
};
-STATIC int
+int
xfs_refcountbt_keys_inorder(
struct xfs_btree_cur *cur,
const union xfs_btree_key *k1,
@@ -293,7 +293,7 @@ xfs_refcountbt_keys_inorder(
be32_to_cpu(k2->refc.rc_startblock);
}
-STATIC int
+int
xfs_refcountbt_recs_inorder(
struct xfs_btree_cur *cur,
const union xfs_btree_rec *r1,
@@ -304,7 +304,7 @@ xfs_refcountbt_recs_inorder(
be32_to_cpu(r2->refc.rc_startblock);
}
-STATIC enum xbtree_key_contig
+enum xbtree_key_contig
xfs_refcountbt_keys_contiguous(
struct xfs_btree_cur *cur,
const union xfs_btree_key *key1,
diff --git a/fs/xfs/libxfs/xfs_refcount_btree.h b/fs/xfs/libxfs/xfs_refcount_btree.h
index beb93bef6a81..40eedfae6846 100644
--- a/fs/xfs/libxfs/xfs_refcount_btree.h
+++ b/fs/xfs/libxfs/xfs_refcount_btree.h
@@ -15,6 +15,8 @@ struct xfs_btree_cur;
struct xfs_mount;
struct xfs_perag;
struct xbtree_afakeroot;
+union xfs_btree_key;
+union xfs_btree_rec;
/*
* Btree block header size
@@ -69,4 +71,28 @@ unsigned int xfs_refcountbt_maxlevels_ondisk(void);
int __init xfs_refcountbt_init_cur_cache(void);
void xfs_refcountbt_destroy_cur_cache(void);
+/*
+ * Key and record btree ops. The refcount on-disk key/record format is
+ * identical for the AG refcount btree and the realtime refcount btree, so
+ * these are shared by both.
+ */
+void xfs_refcountbt_init_key_from_rec(union xfs_btree_key *key,
+ const union xfs_btree_rec *rec);
+void xfs_refcountbt_init_high_key_from_rec(union xfs_btree_key *key,
+ const union xfs_btree_rec *rec);
+void xfs_refcountbt_init_rec_from_cur(struct xfs_btree_cur *cur,
+ union xfs_btree_rec *rec);
+int xfs_refcountbt_cmp_key_with_cur(struct xfs_btree_cur *cur,
+ const union xfs_btree_key *key);
+int xfs_refcountbt_cmp_two_keys(struct xfs_btree_cur *cur,
+ const union xfs_btree_key *k1, const union xfs_btree_key *k2,
+ const union xfs_btree_key *mask);
+int xfs_refcountbt_keys_inorder(struct xfs_btree_cur *cur,
+ const union xfs_btree_key *k1, const union xfs_btree_key *k2);
+int xfs_refcountbt_recs_inorder(struct xfs_btree_cur *cur,
+ const union xfs_btree_rec *r1, const union xfs_btree_rec *r2);
+enum xbtree_key_contig xfs_refcountbt_keys_contiguous(struct xfs_btree_cur *cur,
+ const union xfs_btree_key *key1, const union xfs_btree_key *key2,
+ const union xfs_btree_key *mask);
+
#endif /* __XFS_REFCOUNT_BTREE_H__ */
diff --git a/fs/xfs/libxfs/xfs_rmap.c b/fs/xfs/libxfs/xfs_rmap.c
index 34d218de21a9..14aef87837a9 100644
--- a/fs/xfs/libxfs/xfs_rmap.c
+++ b/fs/xfs/libxfs/xfs_rmap.c
@@ -260,7 +260,7 @@ xfs_rmap_check_irec(
/* Check for a valid fork offset, if applicable. */
if (is_inode && !is_bmbt &&
- !xfs_verify_fileext(mp, irec->rm_offset, irec->rm_blockcount))
+ !xfs_verify_fileext(irec->rm_offset, irec->rm_blockcount))
return __this_address;
return NULL;
@@ -310,7 +310,7 @@ xfs_rtrmap_check_inode_irec(
return __this_address;
if (!xfs_verify_rgbext(rtg, irec->rm_startblock, irec->rm_blockcount))
return __this_address;
- if (!xfs_verify_fileext(mp, irec->rm_offset, irec->rm_blockcount))
+ if (!xfs_verify_fileext(irec->rm_offset, irec->rm_blockcount))
return __this_address;
return NULL;
}
@@ -904,7 +904,6 @@ xfs_rmap_hook_enable(void)
/* Call downstream hooks for a reverse mapping update. */
static inline void
xfs_rmap_update_hook(
- struct xfs_trans *tp,
struct xfs_group *xg,
enum xfs_rmap_intent_type op,
xfs_agblock_t startblock,
@@ -952,7 +951,7 @@ xfs_rmap_hook_setup(
xfs_hook_setup(&hook->rmap_hook, mod_fn);
}
#else
-# define xfs_rmap_update_hook(t, p, o, s, b, u, oi) do { } while (0)
+# define xfs_rmap_update_hook(p, o, s, b, u, oi) do { } while (0)
#endif /* CONFIG_XFS_LIVE_HOOKS */
/*
@@ -975,7 +974,7 @@ xfs_rmap_free(
return 0;
cur = xfs_rmapbt_init_cursor(mp, tp, agbp, pag);
- xfs_rmap_update_hook(tp, pag_group(pag), XFS_RMAP_UNMAP, bno, len,
+ xfs_rmap_update_hook(pag_group(pag), XFS_RMAP_UNMAP, bno, len,
false, oinfo);
error = xfs_rmap_unmap(cur, bno, len, false, oinfo);
@@ -1220,7 +1219,7 @@ xfs_rmap_alloc(
return 0;
cur = xfs_rmapbt_init_cursor(mp, tp, agbp, pag);
- xfs_rmap_update_hook(tp, pag_group(pag), XFS_RMAP_MAP, bno, len, false,
+ xfs_rmap_update_hook(pag_group(pag), XFS_RMAP_MAP, bno, len, false,
oinfo);
error = xfs_rmap_map(cur, bno, len, false, oinfo);
@@ -2721,7 +2720,7 @@ xfs_rmap_finish_one(
if (error)
return error;
- xfs_rmap_update_hook(tp, ri->ri_group, ri->ri_type, bno,
+ xfs_rmap_update_hook(ri->ri_group, ri->ri_type, bno,
ri->ri_bmap.br_blockcount, unwritten, &oinfo);
return 0;
}
diff --git a/fs/xfs/libxfs/xfs_rmap_btree.c b/fs/xfs/libxfs/xfs_rmap_btree.c
index 10b3272238eb..5b283a5ddd13 100644
--- a/fs/xfs/libxfs/xfs_rmap_btree.c
+++ b/fs/xfs/libxfs/xfs_rmap_btree.c
@@ -170,7 +170,7 @@ static inline __be64 ondisk_rec_offset_to_key(const union xfs_btree_rec *rec)
return rec->rmap.rm_offset & ~cpu_to_be64(XFS_RMAP_OFF_UNWRITTEN);
}
-STATIC void
+void
xfs_rmapbt_init_key_from_rec(
union xfs_btree_key *key,
const union xfs_btree_rec *rec)
@@ -187,7 +187,7 @@ xfs_rmapbt_init_key_from_rec(
* the startblock for all records, and if the record is for a data/attr
* fork mapping, we add blockcount-1 to the offset too.
*/
-STATIC void
+void
xfs_rmapbt_init_high_key_from_rec(
union xfs_btree_key *key,
const union xfs_btree_rec *rec)
@@ -209,7 +209,7 @@ xfs_rmapbt_init_high_key_from_rec(
key->rmap.rm_offset = cpu_to_be64(off);
}
-STATIC void
+void
xfs_rmapbt_init_rec_from_cur(
struct xfs_btree_cur *cur,
union xfs_btree_rec *rec)
@@ -243,7 +243,7 @@ static inline uint64_t offset_keymask(uint64_t offset)
return offset & ~XFS_RMAP_OFF_UNWRITTEN;
}
-STATIC int
+int
xfs_rmapbt_cmp_key_with_cur(
struct xfs_btree_cur *cur,
const union xfs_btree_key *key)
@@ -257,7 +257,7 @@ xfs_rmapbt_cmp_key_with_cur(
offset_keymask(xfs_rmap_irec_offset_pack(rec)));
}
-STATIC int
+int
xfs_rmapbt_cmp_two_keys(
struct xfs_btree_cur *cur,
const union xfs_btree_key *k1,
@@ -390,7 +390,7 @@ const struct xfs_buf_ops xfs_rmapbt_buf_ops = {
.verify_struct = xfs_rmapbt_verify,
};
-STATIC int
+int
xfs_rmapbt_keys_inorder(
struct xfs_btree_cur *cur,
const union xfs_btree_key *k1,
@@ -420,7 +420,7 @@ xfs_rmapbt_keys_inorder(
return 0;
}
-STATIC int
+int
xfs_rmapbt_recs_inorder(
struct xfs_btree_cur *cur,
const union xfs_btree_rec *r1,
@@ -450,7 +450,7 @@ xfs_rmapbt_recs_inorder(
return 0;
}
-STATIC enum xbtree_key_contig
+enum xbtree_key_contig
xfs_rmapbt_keys_contiguous(
struct xfs_btree_cur *cur,
const union xfs_btree_key *key1,
diff --git a/fs/xfs/libxfs/xfs_rmap_btree.h b/fs/xfs/libxfs/xfs_rmap_btree.h
index 119b1567cd0e..7071dac745e1 100644
--- a/fs/xfs/libxfs/xfs_rmap_btree.h
+++ b/fs/xfs/libxfs/xfs_rmap_btree.h
@@ -11,6 +11,8 @@ struct xfs_btree_cur;
struct xfs_mount;
struct xbtree_afakeroot;
struct xfbtree;
+union xfs_btree_key;
+union xfs_btree_rec;
/* rmaps only exist on crc enabled filesystems */
#define XFS_RMAP_BLOCK_LEN XFS_BTREE_SBLOCK_CRC_LEN
@@ -69,4 +71,28 @@ struct xfs_btree_cur *xfs_rmapbt_mem_cursor(struct xfs_perag *pag,
int xfs_rmapbt_mem_init(struct xfs_mount *mp, struct xfbtree *xfbtree,
struct xfs_buftarg *btp, xfs_agnumber_t agno);
+/*
+ * Key and record btree ops. The rmap on-disk key/record format is identical
+ * for the AG rmap btree and the realtime rmap btree, so these are shared by
+ * both.
+ */
+void xfs_rmapbt_init_key_from_rec(union xfs_btree_key *key,
+ const union xfs_btree_rec *rec);
+void xfs_rmapbt_init_high_key_from_rec(union xfs_btree_key *key,
+ const union xfs_btree_rec *rec);
+void xfs_rmapbt_init_rec_from_cur(struct xfs_btree_cur *cur,
+ union xfs_btree_rec *rec);
+int xfs_rmapbt_cmp_key_with_cur(struct xfs_btree_cur *cur,
+ const union xfs_btree_key *key);
+int xfs_rmapbt_cmp_two_keys(struct xfs_btree_cur *cur,
+ const union xfs_btree_key *k1, const union xfs_btree_key *k2,
+ const union xfs_btree_key *mask);
+int xfs_rmapbt_keys_inorder(struct xfs_btree_cur *cur,
+ const union xfs_btree_key *k1, const union xfs_btree_key *k2);
+int xfs_rmapbt_recs_inorder(struct xfs_btree_cur *cur,
+ const union xfs_btree_rec *r1, const union xfs_btree_rec *r2);
+enum xbtree_key_contig xfs_rmapbt_keys_contiguous(struct xfs_btree_cur *cur,
+ const union xfs_btree_key *key1, const union xfs_btree_key *key2,
+ const union xfs_btree_key *mask);
+
#endif /* __XFS_RMAP_BTREE_H__ */
diff --git a/fs/xfs/libxfs/xfs_rtrefcount_btree.c b/fs/xfs/libxfs/xfs_rtrefcount_btree.c
index dcc89b8e149b..697f5e622685 100644
--- a/fs/xfs/libxfs/xfs_rtrefcount_btree.c
+++ b/fs/xfs/libxfs/xfs_rtrefcount_btree.c
@@ -20,6 +20,7 @@
#include "xfs_btree_staging.h"
#include "xfs_rtrefcount_btree.h"
#include "xfs_refcount.h"
+#include "xfs_refcount_btree.h"
#include "xfs_trace.h"
#include "xfs_cksum.h"
#include "xfs_error.h"
@@ -114,41 +115,6 @@ xfs_rtrefcountbt_get_dmaxrecs(
}
STATIC void
-xfs_rtrefcountbt_init_key_from_rec(
- union xfs_btree_key *key,
- const union xfs_btree_rec *rec)
-{
- key->refc.rc_startblock = rec->refc.rc_startblock;
-}
-
-STATIC void
-xfs_rtrefcountbt_init_high_key_from_rec(
- union xfs_btree_key *key,
- const union xfs_btree_rec *rec)
-{
- __u32 x;
-
- x = be32_to_cpu(rec->refc.rc_startblock);
- x += be32_to_cpu(rec->refc.rc_blockcount) - 1;
- key->refc.rc_startblock = cpu_to_be32(x);
-}
-
-STATIC void
-xfs_rtrefcountbt_init_rec_from_cur(
- struct xfs_btree_cur *cur,
- union xfs_btree_rec *rec)
-{
- const struct xfs_refcount_irec *irec = &cur->bc_rec.rc;
- uint32_t start;
-
- start = xfs_refcount_encode_startblock(irec->rc_startblock,
- irec->rc_domain);
- rec->refc.rc_startblock = cpu_to_be32(start);
- rec->refc.rc_blockcount = cpu_to_be32(cur->bc_rec.rc.rc_blockcount);
- rec->refc.rc_refcount = cpu_to_be32(cur->bc_rec.rc.rc_refcount);
-}
-
-STATIC void
xfs_rtrefcountbt_init_ptr_from_cur(
struct xfs_btree_cur *cur,
union xfs_btree_ptr *ptr)
@@ -156,33 +122,6 @@ xfs_rtrefcountbt_init_ptr_from_cur(
ptr->l = 0;
}
-STATIC int
-xfs_rtrefcountbt_cmp_key_with_cur(
- struct xfs_btree_cur *cur,
- const union xfs_btree_key *key)
-{
- const struct xfs_refcount_key *kp = &key->refc;
- const struct xfs_refcount_irec *irec = &cur->bc_rec.rc;
- uint32_t start;
-
- start = xfs_refcount_encode_startblock(irec->rc_startblock,
- irec->rc_domain);
- return cmp_int(be32_to_cpu(kp->rc_startblock), start);
-}
-
-STATIC int
-xfs_rtrefcountbt_cmp_two_keys(
- struct xfs_btree_cur *cur,
- const union xfs_btree_key *k1,
- const union xfs_btree_key *k2,
- const union xfs_btree_key *mask)
-{
- ASSERT(!mask || mask->refc.rc_startblock);
-
- return cmp_int(be32_to_cpu(k1->refc.rc_startblock),
- be32_to_cpu(k2->refc.rc_startblock));
-}
-
static xfs_failaddr_t
xfs_rtrefcountbt_verify(
struct xfs_buf *bp)
@@ -249,40 +188,6 @@ const struct xfs_buf_ops xfs_rtrefcountbt_buf_ops = {
.verify_struct = xfs_rtrefcountbt_verify,
};
-STATIC int
-xfs_rtrefcountbt_keys_inorder(
- struct xfs_btree_cur *cur,
- const union xfs_btree_key *k1,
- const union xfs_btree_key *k2)
-{
- return be32_to_cpu(k1->refc.rc_startblock) <
- be32_to_cpu(k2->refc.rc_startblock);
-}
-
-STATIC int
-xfs_rtrefcountbt_recs_inorder(
- struct xfs_btree_cur *cur,
- const union xfs_btree_rec *r1,
- const union xfs_btree_rec *r2)
-{
- return be32_to_cpu(r1->refc.rc_startblock) +
- be32_to_cpu(r1->refc.rc_blockcount) <=
- be32_to_cpu(r2->refc.rc_startblock);
-}
-
-STATIC enum xbtree_key_contig
-xfs_rtrefcountbt_keys_contiguous(
- struct xfs_btree_cur *cur,
- const union xfs_btree_key *key1,
- const union xfs_btree_key *key2,
- const union xfs_btree_key *mask)
-{
- ASSERT(!mask || mask->refc.rc_startblock);
-
- return xbtree_key_contig(be32_to_cpu(key1->refc.rc_startblock),
- be32_to_cpu(key2->refc.rc_startblock));
-}
-
static inline void
xfs_rtrefcountbt_move_ptrs(
struct xfs_mount *mp,
@@ -311,7 +216,7 @@ xfs_rtrefcountbt_broot_realloc(
unsigned int old_size = ifp->if_broot_bytes;
const unsigned int level = cur->bc_nlevels - 1;
- new_size = xfs_rtrefcount_broot_space_calc(mp, level, new_numrecs);
+ new_size = xfs_rtrefcount_broot_space_calc(level, new_numrecs);
/* Handle the nop case quietly. */
if (new_size == old_size)
@@ -383,16 +288,16 @@ const struct xfs_btree_ops xfs_rtrefcountbt_ops = {
.get_minrecs = xfs_rtrefcountbt_get_minrecs,
.get_maxrecs = xfs_rtrefcountbt_get_maxrecs,
.get_dmaxrecs = xfs_rtrefcountbt_get_dmaxrecs,
- .init_key_from_rec = xfs_rtrefcountbt_init_key_from_rec,
- .init_high_key_from_rec = xfs_rtrefcountbt_init_high_key_from_rec,
- .init_rec_from_cur = xfs_rtrefcountbt_init_rec_from_cur,
+ .init_key_from_rec = xfs_refcountbt_init_key_from_rec,
+ .init_high_key_from_rec = xfs_refcountbt_init_high_key_from_rec,
+ .init_rec_from_cur = xfs_refcountbt_init_rec_from_cur,
.init_ptr_from_cur = xfs_rtrefcountbt_init_ptr_from_cur,
- .cmp_key_with_cur = xfs_rtrefcountbt_cmp_key_with_cur,
+ .cmp_key_with_cur = xfs_refcountbt_cmp_key_with_cur,
.buf_ops = &xfs_rtrefcountbt_buf_ops,
- .cmp_two_keys = xfs_rtrefcountbt_cmp_two_keys,
- .keys_inorder = xfs_rtrefcountbt_keys_inorder,
- .recs_inorder = xfs_rtrefcountbt_recs_inorder,
- .keys_contiguous = xfs_rtrefcountbt_keys_contiguous,
+ .cmp_two_keys = xfs_refcountbt_cmp_two_keys,
+ .keys_inorder = xfs_refcountbt_keys_inorder,
+ .recs_inorder = xfs_refcountbt_recs_inorder,
+ .keys_contiguous = xfs_refcountbt_keys_contiguous,
.broot_realloc = xfs_rtrefcountbt_broot_realloc,
};
@@ -602,7 +507,7 @@ xfs_rtrefcountbt_from_disk(
unsigned int maxrecs;
unsigned int rblocklen;
- rblocklen = xfs_rtrefcount_broot_space(mp, dblock);
+ rblocklen = xfs_rtrefcount_broot_space(dblock);
xfs_btree_init_block(mp, rblock, &xfs_rtrefcountbt_ops, 0, 0,
I_INO(ip));
@@ -661,7 +566,7 @@ xfs_iformat_rtrefcount(
}
broot = xfs_broot_alloc(xfs_ifork_ptr(ip, XFS_DATA_FORK),
- xfs_rtrefcount_broot_space_calc(mp, level, numrecs));
+ xfs_rtrefcount_broot_space_calc(level, numrecs));
if (broot)
xfs_rtrefcountbt_from_disk(ip, dfp, dsize, broot);
return 0;
@@ -751,7 +656,7 @@ xfs_rtrefcountbt_create(
/* Initialize the empty incore btree root. */
broot = xfs_broot_realloc(ifp,
- xfs_rtrefcount_broot_space_calc(mp, 0, 0));
+ xfs_rtrefcount_broot_space_calc(0, 0));
if (broot)
xfs_btree_init_block(mp, broot, &xfs_rtrefcountbt_ops, 0, 0,
I_INO(ip));
diff --git a/fs/xfs/libxfs/xfs_rtrefcount_btree.h b/fs/xfs/libxfs/xfs_rtrefcount_btree.h
index a99b7a8aec86..9ab6ecf90ba5 100644
--- a/fs/xfs/libxfs/xfs_rtrefcount_btree.h
+++ b/fs/xfs/libxfs/xfs_rtrefcount_btree.h
@@ -129,7 +129,6 @@ xfs_rtrefcount_broot_ptr_addr(
*/
static inline size_t
xfs_rtrefcount_broot_space_calc(
- struct xfs_mount *mp,
unsigned int level,
unsigned int nrecs)
{
@@ -146,9 +145,9 @@ xfs_rtrefcount_broot_space_calc(
* btree root block.
*/
static inline size_t
-xfs_rtrefcount_broot_space(struct xfs_mount *mp, struct xfs_rtrefcount_root *bb)
+xfs_rtrefcount_broot_space(struct xfs_rtrefcount_root *bb)
{
- return xfs_rtrefcount_broot_space_calc(mp, be16_to_cpu(bb->bb_level),
+ return xfs_rtrefcount_broot_space_calc(be16_to_cpu(bb->bb_level),
be16_to_cpu(bb->bb_numrecs));
}
diff --git a/fs/xfs/libxfs/xfs_rtrmap_btree.c b/fs/xfs/libxfs/xfs_rtrmap_btree.c
index a15e460a1ec7..2f00d0698ae1 100644
--- a/fs/xfs/libxfs/xfs_rtrmap_btree.c
+++ b/fs/xfs/libxfs/xfs_rtrmap_btree.c
@@ -20,6 +20,7 @@
#include "xfs_btree_staging.h"
#include "xfs_metafile.h"
#include "xfs_rmap.h"
+#include "xfs_rmap_btree.h"
#include "xfs_rtrmap_btree.h"
#include "xfs_trace.h"
#include "xfs_cksum.h"
@@ -113,60 +114,6 @@ xfs_rtrmapbt_get_dmaxrecs(
return xfs_rtrmapbt_droot_maxrecs(cur->bc_ino.forksize, level == 0);
}
-/*
- * Convert the ondisk record's offset field into the ondisk key's offset field.
- * Fork and bmbt are significant parts of the rmap record key, but written
- * status is merely a record attribute.
- */
-static inline __be64 ondisk_rec_offset_to_key(const union xfs_btree_rec *rec)
-{
- return rec->rmap.rm_offset & ~cpu_to_be64(XFS_RMAP_OFF_UNWRITTEN);
-}
-
-STATIC void
-xfs_rtrmapbt_init_key_from_rec(
- union xfs_btree_key *key,
- const union xfs_btree_rec *rec)
-{
- key->rmap.rm_startblock = rec->rmap.rm_startblock;
- key->rmap.rm_owner = rec->rmap.rm_owner;
- key->rmap.rm_offset = ondisk_rec_offset_to_key(rec);
-}
-
-STATIC void
-xfs_rtrmapbt_init_high_key_from_rec(
- union xfs_btree_key *key,
- const union xfs_btree_rec *rec)
-{
- uint64_t off;
- int adj;
-
- adj = be32_to_cpu(rec->rmap.rm_blockcount) - 1;
-
- key->rmap.rm_startblock = rec->rmap.rm_startblock;
- be32_add_cpu(&key->rmap.rm_startblock, adj);
- key->rmap.rm_owner = rec->rmap.rm_owner;
- key->rmap.rm_offset = ondisk_rec_offset_to_key(rec);
- if (XFS_RMAP_NON_INODE_OWNER(be64_to_cpu(rec->rmap.rm_owner)) ||
- XFS_RMAP_IS_BMBT_BLOCK(be64_to_cpu(rec->rmap.rm_offset)))
- return;
- off = be64_to_cpu(key->rmap.rm_offset);
- off = (XFS_RMAP_OFF(off) + adj) | (off & ~XFS_RMAP_OFF_MASK);
- key->rmap.rm_offset = cpu_to_be64(off);
-}
-
-STATIC void
-xfs_rtrmapbt_init_rec_from_cur(
- struct xfs_btree_cur *cur,
- union xfs_btree_rec *rec)
-{
- rec->rmap.rm_startblock = cpu_to_be32(cur->bc_rec.r.rm_startblock);
- rec->rmap.rm_blockcount = cpu_to_be32(cur->bc_rec.r.rm_blockcount);
- rec->rmap.rm_owner = cpu_to_be64(cur->bc_rec.r.rm_owner);
- rec->rmap.rm_offset = cpu_to_be64(
- xfs_rmap_irec_offset_pack(&cur->bc_rec.r));
-}
-
STATIC void
xfs_rtrmapbt_init_ptr_from_cur(
struct xfs_btree_cur *cur,
@@ -175,69 +122,6 @@ xfs_rtrmapbt_init_ptr_from_cur(
ptr->l = 0;
}
-/*
- * Mask the appropriate parts of the ondisk key field for a key comparison.
- * Fork and bmbt are significant parts of the rmap record key, but written
- * status is merely a record attribute.
- */
-static inline uint64_t offset_keymask(uint64_t offset)
-{
- return offset & ~XFS_RMAP_OFF_UNWRITTEN;
-}
-
-STATIC int
-xfs_rtrmapbt_cmp_key_with_cur(
- struct xfs_btree_cur *cur,
- const union xfs_btree_key *key)
-{
- struct xfs_rmap_irec *rec = &cur->bc_rec.r;
- const struct xfs_rmap_key *kp = &key->rmap;
-
- return cmp_int(be32_to_cpu(kp->rm_startblock), rec->rm_startblock) ?:
- cmp_int(be64_to_cpu(kp->rm_owner), rec->rm_owner) ?:
- cmp_int(offset_keymask(be64_to_cpu(kp->rm_offset)),
- offset_keymask(xfs_rmap_irec_offset_pack(rec)));
-}
-
-STATIC int
-xfs_rtrmapbt_cmp_two_keys(
- struct xfs_btree_cur *cur,
- const union xfs_btree_key *k1,
- const union xfs_btree_key *k2,
- const union xfs_btree_key *mask)
-{
- const struct xfs_rmap_key *kp1 = &k1->rmap;
- const struct xfs_rmap_key *kp2 = &k2->rmap;
- int d;
-
- /* Doesn't make sense to mask off the physical space part */
- ASSERT(!mask || mask->rmap.rm_startblock);
-
- d = cmp_int(be32_to_cpu(kp1->rm_startblock),
- be32_to_cpu(kp2->rm_startblock));
- if (d)
- return d;
-
- if (!mask || mask->rmap.rm_owner) {
- d = cmp_int(be64_to_cpu(kp1->rm_owner),
- be64_to_cpu(kp2->rm_owner));
- if (d)
- return d;
- }
-
- if (!mask || mask->rmap.rm_offset) {
- /* Doesn't make sense to allow offset but not owner */
- ASSERT(!mask || mask->rmap.rm_owner);
-
- d = cmp_int(offset_keymask(be64_to_cpu(kp1->rm_offset)),
- offset_keymask(be64_to_cpu(kp2->rm_offset)));
- if (d)
- return d;
- }
-
- return 0;
-}
-
static xfs_failaddr_t
xfs_rtrmapbt_verify(
struct xfs_buf *bp)
@@ -304,86 +188,6 @@ const struct xfs_buf_ops xfs_rtrmapbt_buf_ops = {
.verify_struct = xfs_rtrmapbt_verify,
};
-STATIC int
-xfs_rtrmapbt_keys_inorder(
- struct xfs_btree_cur *cur,
- const union xfs_btree_key *k1,
- const union xfs_btree_key *k2)
-{
- uint32_t x;
- uint32_t y;
- uint64_t a;
- uint64_t b;
-
- x = be32_to_cpu(k1->rmap.rm_startblock);
- y = be32_to_cpu(k2->rmap.rm_startblock);
- if (x < y)
- return 1;
- else if (x > y)
- return 0;
- a = be64_to_cpu(k1->rmap.rm_owner);
- b = be64_to_cpu(k2->rmap.rm_owner);
- if (a < b)
- return 1;
- else if (a > b)
- return 0;
- a = offset_keymask(be64_to_cpu(k1->rmap.rm_offset));
- b = offset_keymask(be64_to_cpu(k2->rmap.rm_offset));
- if (a <= b)
- return 1;
- return 0;
-}
-
-STATIC int
-xfs_rtrmapbt_recs_inorder(
- struct xfs_btree_cur *cur,
- const union xfs_btree_rec *r1,
- const union xfs_btree_rec *r2)
-{
- uint32_t x;
- uint32_t y;
- uint64_t a;
- uint64_t b;
-
- x = be32_to_cpu(r1->rmap.rm_startblock);
- y = be32_to_cpu(r2->rmap.rm_startblock);
- if (x < y)
- return 1;
- else if (x > y)
- return 0;
- a = be64_to_cpu(r1->rmap.rm_owner);
- b = be64_to_cpu(r2->rmap.rm_owner);
- if (a < b)
- return 1;
- else if (a > b)
- return 0;
- a = offset_keymask(be64_to_cpu(r1->rmap.rm_offset));
- b = offset_keymask(be64_to_cpu(r2->rmap.rm_offset));
- if (a <= b)
- return 1;
- return 0;
-}
-
-STATIC enum xbtree_key_contig
-xfs_rtrmapbt_keys_contiguous(
- struct xfs_btree_cur *cur,
- const union xfs_btree_key *key1,
- const union xfs_btree_key *key2,
- const union xfs_btree_key *mask)
-{
- ASSERT(!mask || mask->rmap.rm_startblock);
-
- /*
- * We only support checking contiguity of the physical space component.
- * If any callers ever need more specificity than that, they'll have to
- * implement it here.
- */
- ASSERT(!mask || (!mask->rmap.rm_owner && !mask->rmap.rm_offset));
-
- return xbtree_key_contig(be32_to_cpu(key1->rmap.rm_startblock),
- be32_to_cpu(key2->rmap.rm_startblock));
-}
-
static inline void
xfs_rtrmapbt_move_ptrs(
struct xfs_mount *mp,
@@ -412,7 +216,7 @@ xfs_rtrmapbt_broot_realloc(
unsigned int old_size = ifp->if_broot_bytes;
const unsigned int level = cur->bc_nlevels - 1;
- new_size = xfs_rtrmap_broot_space_calc(mp, level, new_numrecs);
+ new_size = xfs_rtrmap_broot_space_calc(level, new_numrecs);
/* Handle the nop case quietly. */
if (new_size == old_size)
@@ -486,16 +290,16 @@ const struct xfs_btree_ops xfs_rtrmapbt_ops = {
.get_minrecs = xfs_rtrmapbt_get_minrecs,
.get_maxrecs = xfs_rtrmapbt_get_maxrecs,
.get_dmaxrecs = xfs_rtrmapbt_get_dmaxrecs,
- .init_key_from_rec = xfs_rtrmapbt_init_key_from_rec,
- .init_high_key_from_rec = xfs_rtrmapbt_init_high_key_from_rec,
- .init_rec_from_cur = xfs_rtrmapbt_init_rec_from_cur,
+ .init_key_from_rec = xfs_rmapbt_init_key_from_rec,
+ .init_high_key_from_rec = xfs_rmapbt_init_high_key_from_rec,
+ .init_rec_from_cur = xfs_rmapbt_init_rec_from_cur,
.init_ptr_from_cur = xfs_rtrmapbt_init_ptr_from_cur,
- .cmp_key_with_cur = xfs_rtrmapbt_cmp_key_with_cur,
+ .cmp_key_with_cur = xfs_rmapbt_cmp_key_with_cur,
.buf_ops = &xfs_rtrmapbt_buf_ops,
- .cmp_two_keys = xfs_rtrmapbt_cmp_two_keys,
- .keys_inorder = xfs_rtrmapbt_keys_inorder,
- .recs_inorder = xfs_rtrmapbt_recs_inorder,
- .keys_contiguous = xfs_rtrmapbt_keys_contiguous,
+ .cmp_two_keys = xfs_rmapbt_cmp_two_keys,
+ .keys_inorder = xfs_rmapbt_keys_inorder,
+ .recs_inorder = xfs_rmapbt_recs_inorder,
+ .keys_contiguous = xfs_rmapbt_keys_contiguous,
.broot_realloc = xfs_rtrmapbt_broot_realloc,
};
@@ -595,16 +399,16 @@ const struct xfs_btree_ops xfs_rtrmapbt_mem_ops = {
.free_block = xfbtree_free_block,
.get_minrecs = xfbtree_get_minrecs,
.get_maxrecs = xfbtree_get_maxrecs,
- .init_key_from_rec = xfs_rtrmapbt_init_key_from_rec,
- .init_high_key_from_rec = xfs_rtrmapbt_init_high_key_from_rec,
- .init_rec_from_cur = xfs_rtrmapbt_init_rec_from_cur,
+ .init_key_from_rec = xfs_rmapbt_init_key_from_rec,
+ .init_high_key_from_rec = xfs_rmapbt_init_high_key_from_rec,
+ .init_rec_from_cur = xfs_rmapbt_init_rec_from_cur,
.init_ptr_from_cur = xfbtree_init_ptr_from_cur,
- .cmp_key_with_cur = xfs_rtrmapbt_cmp_key_with_cur,
+ .cmp_key_with_cur = xfs_rmapbt_cmp_key_with_cur,
.buf_ops = &xfs_rtrmapbt_mem_buf_ops,
- .cmp_two_keys = xfs_rtrmapbt_cmp_two_keys,
- .keys_inorder = xfs_rtrmapbt_keys_inorder,
- .recs_inorder = xfs_rtrmapbt_recs_inorder,
- .keys_contiguous = xfs_rtrmapbt_keys_contiguous,
+ .cmp_two_keys = xfs_rmapbt_cmp_two_keys,
+ .keys_inorder = xfs_rmapbt_keys_inorder,
+ .recs_inorder = xfs_rmapbt_recs_inorder,
+ .keys_contiguous = xfs_rmapbt_keys_contiguous,
};
/* Create a cursor for an in-memory btree. */
@@ -895,7 +699,7 @@ xfs_iformat_rtrmap(
}
broot = xfs_broot_alloc(xfs_ifork_ptr(ip, XFS_DATA_FORK),
- xfs_rtrmap_broot_space_calc(mp, level, numrecs));
+ xfs_rtrmap_broot_space_calc(level, numrecs));
if (broot)
xfs_rtrmapbt_from_disk(ip, dfp, dsize, broot);
return 0;
@@ -980,7 +784,7 @@ xfs_rtrmapbt_create(
ASSERT(ifp->if_bytes == 0);
/* Initialize the empty incore btree root. */
- broot = xfs_broot_realloc(ifp, xfs_rtrmap_broot_space_calc(mp, 0, 0));
+ broot = xfs_broot_realloc(ifp, xfs_rtrmap_broot_space_calc(0, 0));
if (broot)
xfs_btree_init_block(mp, broot, &xfs_rtrmapbt_ops, 0, 0,
I_INO(ip));
diff --git a/fs/xfs/libxfs/xfs_rtrmap_btree.h b/fs/xfs/libxfs/xfs_rtrmap_btree.h
index e328fd62a149..c59a144b4bbf 100644
--- a/fs/xfs/libxfs/xfs_rtrmap_btree.h
+++ b/fs/xfs/libxfs/xfs_rtrmap_btree.h
@@ -140,7 +140,6 @@ xfs_rtrmap_broot_ptr_addr(
*/
static inline size_t
xfs_rtrmap_broot_space_calc(
- struct xfs_mount *mp,
unsigned int level,
unsigned int nrecs)
{
@@ -159,7 +158,7 @@ xfs_rtrmap_broot_space_calc(
static inline size_t
xfs_rtrmap_broot_space(struct xfs_mount *mp, struct xfs_rtrmap_root *bb)
{
- return xfs_rtrmap_broot_space_calc(mp, be16_to_cpu(bb->bb_level),
+ return xfs_rtrmap_broot_space_calc(be16_to_cpu(bb->bb_level),
be16_to_cpu(bb->bb_numrecs));
}
diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c
index f0341adbb879..d2ef7b20a49f 100644
--- a/fs/xfs/libxfs/xfs_sb.c
+++ b/fs/xfs/libxfs/xfs_sb.c
@@ -1460,46 +1460,6 @@ xfs_update_secondary_sbs(
return saved_error ? saved_error : error;
}
-/*
- * Same behavior as xfs_sync_sb, except that it is always synchronous and it
- * also writes the superblock buffer to disk sector 0 immediately.
- */
-int
-xfs_sync_sb_buf(
- struct xfs_mount *mp,
- bool update_rtsb)
-{
- struct xfs_trans *tp;
- int error;
-
- error = xfs_trans_alloc(mp, &M_RES(mp)->tr_sb, 0, 0, 0, &tp);
- if (error)
- return error;
-
- xfs_log_sb(tp);
- if (update_rtsb)
- xfs_log_rtsb(tp, xfs_trans_getsb(tp));
- xfs_trans_set_sync(tp);
- error = xfs_trans_commit(tp);
- if (error)
- return error;
-
- /* Re-acquire and write the sb and rtsb to disk. */
- xfs_buf_lock(mp->m_sb_bp);
- error = xfs_bwrite(mp->m_sb_bp);
- xfs_buf_unlock(mp->m_sb_bp);
- if (error)
- return error;
-
- if (update_rtsb && mp->m_rtsb_bp) {
- xfs_buf_lock(mp->m_rtsb_bp);
- error = xfs_bwrite(mp->m_rtsb_bp);
- xfs_buf_unlock(mp->m_rtsb_bp);
- }
-
- return error;
-}
-
void
xfs_fs_geometry(
struct xfs_mount *mp,
diff --git a/fs/xfs/libxfs/xfs_sb.h b/fs/xfs/libxfs/xfs_sb.h
index 34d0dd374e9b..77de65922213 100644
--- a/fs/xfs/libxfs/xfs_sb.h
+++ b/fs/xfs/libxfs/xfs_sb.h
@@ -15,7 +15,6 @@ struct xfs_perag;
extern void xfs_log_sb(struct xfs_trans *tp);
extern int xfs_sync_sb(struct xfs_mount *mp, bool wait);
-extern int xfs_sync_sb_buf(struct xfs_mount *mp, bool update_rtsb);
extern void xfs_sb_mount_common(struct xfs_mount *mp, struct xfs_sb *sbp);
void xfs_sb_mount_rextsize(struct xfs_mount *mp, struct xfs_sb *sbp);
void xfs_mount_sb_set_rextsize(struct xfs_mount *mp,
diff --git a/fs/xfs/libxfs/xfs_symlink_remote.c b/fs/xfs/libxfs/xfs_symlink_remote.c
index b0dc3888bf1b..0201a3d59b1a 100644
--- a/fs/xfs/libxfs/xfs_symlink_remote.c
+++ b/fs/xfs/libxfs/xfs_symlink_remote.c
@@ -208,11 +208,15 @@ xfs_symlink_local_to_remote(
*/
xfs_failaddr_t
xfs_symlink_shortform_verify(
- void *sfp,
- int64_t size)
+ struct xfs_inode *ip)
{
+ struct xfs_ifork *ifp = xfs_ifork_ptr(ip, XFS_DATA_FORK);
+ char *sfp = (char *)ifp->if_data;
+ int size = ifp->if_bytes;
char *endp = sfp + size;
+ ASSERT(ifp->if_format == XFS_DINODE_FMT_LOCAL);
+
/*
* Zero length symlinks should never occur in memory as they are
* never allowed to exist on disk.
diff --git a/fs/xfs/libxfs/xfs_symlink_remote.h b/fs/xfs/libxfs/xfs_symlink_remote.h
index c1672fe1f17b..3f6590602473 100644
--- a/fs/xfs/libxfs/xfs_symlink_remote.h
+++ b/fs/xfs/libxfs/xfs_symlink_remote.h
@@ -18,7 +18,7 @@ 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,
void *priv);
-xfs_failaddr_t xfs_symlink_shortform_verify(void *sfp, int64_t size);
+xfs_failaddr_t xfs_symlink_shortform_verify(struct xfs_inode *ip);
int xfs_symlink_remote_read(struct xfs_inode *ip, char *link);
int xfs_symlink_write_target(struct xfs_trans *tp, struct xfs_inode *ip,
xfs_ino_t owner, const char *target_path, int pathlen,
diff --git a/fs/xfs/libxfs/xfs_trans_resv.c b/fs/xfs/libxfs/xfs_trans_resv.c
index 3151e97ca8ff..b09c88aec185 100644
--- a/fs/xfs/libxfs/xfs_trans_resv.c
+++ b/fs/xfs/libxfs/xfs_trans_resv.c
@@ -606,10 +606,10 @@ static inline unsigned int xfs_calc_pptr_replace_overhead(void)
*/
STATIC uint
xfs_calc_rename_reservation(
- struct xfs_mount *mp)
+ struct xfs_mount *mp,
+ struct xfs_trans_resv *resp)
{
unsigned int overhead = XFS_DQUOT_LOGRES;
- struct xfs_trans_resv *resp = M_RES(mp);
unsigned int t1, t2, t3 = 0;
t1 = xfs_calc_inode_res(mp, 5) +
@@ -715,10 +715,10 @@ xfs_link_log_count(
*/
STATIC uint
xfs_calc_link_reservation(
- struct xfs_mount *mp)
+ struct xfs_mount *mp,
+ struct xfs_trans_resv *resp)
{
unsigned int overhead = XFS_DQUOT_LOGRES;
- struct xfs_trans_resv *resp = M_RES(mp);
unsigned int t1, t2, t3 = 0;
overhead += xfs_calc_iunlink_remove_reservation(mp);
@@ -777,10 +777,10 @@ xfs_remove_log_count(
*/
STATIC uint
xfs_calc_remove_reservation(
- struct xfs_mount *mp)
+ struct xfs_mount *mp,
+ struct xfs_trans_resv *resp)
{
unsigned int overhead = XFS_DQUOT_LOGRES;
- struct xfs_trans_resv *resp = M_RES(mp);
unsigned int t1, t2, t3 = 0;
overhead += xfs_calc_iunlink_add_reservation(mp);
@@ -862,9 +862,9 @@ xfs_icreate_log_count(
STATIC uint
xfs_calc_icreate_reservation(
- struct xfs_mount *mp)
+ struct xfs_mount *mp,
+ struct xfs_trans_resv *resp)
{
- struct xfs_trans_resv *resp = M_RES(mp);
unsigned int overhead = XFS_DQUOT_LOGRES;
unsigned int t1, t2, t3 = 0;
@@ -911,9 +911,10 @@ xfs_mkdir_log_count(
*/
STATIC uint
xfs_calc_mkdir_reservation(
- struct xfs_mount *mp)
+ struct xfs_mount *mp,
+ struct xfs_trans_resv *resp)
{
- return xfs_calc_icreate_reservation(mp);
+ return xfs_calc_icreate_reservation(mp, resp);
}
static inline unsigned int
@@ -940,9 +941,10 @@ xfs_symlink_log_count(
*/
STATIC uint
xfs_calc_symlink_reservation(
- struct xfs_mount *mp)
+ struct xfs_mount *mp,
+ struct xfs_trans_resv *resp)
{
- return xfs_calc_icreate_reservation(mp) +
+ return xfs_calc_icreate_reservation(mp, resp) +
xfs_calc_buf_res(1, XFS_SYMLINK_MAXLEN);
}
@@ -1265,34 +1267,33 @@ xfs_calc_namespace_reservations(
{
ASSERT(resp->tr_attrsetm.tr_logres > 0);
- resp->tr_rename.tr_logres = xfs_calc_rename_reservation(mp);
+ resp->tr_rename.tr_logres = xfs_calc_rename_reservation(mp, resp);
resp->tr_rename.tr_logcount = xfs_rename_log_count(mp, resp);
resp->tr_rename.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
- resp->tr_link.tr_logres = xfs_calc_link_reservation(mp);
+ resp->tr_link.tr_logres = xfs_calc_link_reservation(mp, resp);
resp->tr_link.tr_logcount = xfs_link_log_count(mp, resp);
resp->tr_link.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
- resp->tr_remove.tr_logres = xfs_calc_remove_reservation(mp);
+ resp->tr_remove.tr_logres = xfs_calc_remove_reservation(mp, resp);
resp->tr_remove.tr_logcount = xfs_remove_log_count(mp, resp);
resp->tr_remove.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
- resp->tr_symlink.tr_logres = xfs_calc_symlink_reservation(mp);
+ resp->tr_symlink.tr_logres = xfs_calc_symlink_reservation(mp, resp);
resp->tr_symlink.tr_logcount = xfs_symlink_log_count(mp, resp);
resp->tr_symlink.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
- resp->tr_create.tr_logres = xfs_calc_icreate_reservation(mp);
+ resp->tr_create.tr_logres = xfs_calc_icreate_reservation(mp, resp);
resp->tr_create.tr_logcount = xfs_icreate_log_count(mp, resp);
resp->tr_create.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
- resp->tr_mkdir.tr_logres = xfs_calc_mkdir_reservation(mp);
+ resp->tr_mkdir.tr_logres = xfs_calc_mkdir_reservation(mp, resp);
resp->tr_mkdir.tr_logcount = xfs_mkdir_log_count(mp, resp);
resp->tr_mkdir.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
}
STATIC void
xfs_calc_default_atomic_ioend_reservation(
- struct xfs_mount *mp,
struct xfs_trans_resv *resp)
{
/* Pick a default that will scale reasonably for the log size. */
@@ -1398,7 +1399,7 @@ xfs_trans_resv_calc(
* Now that we've finished computing the static reservations, we can
* compute the dynamic reservation for atomic writes.
*/
- xfs_calc_default_atomic_ioend_reservation(mp, resp);
+ xfs_calc_default_atomic_ioend_reservation(resp);
}
/*
@@ -1508,7 +1509,7 @@ xfs_calc_atomic_write_log_geometry(
ASSERT(blockcount > 0);
- xfs_calc_default_atomic_ioend_reservation(mp, M_RES(mp));
+ xfs_calc_default_atomic_ioend_reservation(M_RES(mp));
per_intent = xfs_calc_atomic_write_ioend_geometry(mp, &step_size);
@@ -1545,7 +1546,7 @@ xfs_calc_atomic_write_reservation(
* use the defaults.
*/
if (blockcount == 0) {
- xfs_calc_default_atomic_ioend_reservation(mp, M_RES(mp));
+ xfs_calc_default_atomic_ioend_reservation(M_RES(mp));
return 0;
}
diff --git a/fs/xfs/libxfs/xfs_trans_space.c b/fs/xfs/libxfs/xfs_trans_space.c
index c4cd547033e5..7edd0d86f0bd 100644
--- a/fs/xfs/libxfs/xfs_trans_space.c
+++ b/fs/xfs/libxfs/xfs_trans_space.c
@@ -127,10 +127,10 @@ xfs_rename_space_res(
if (has_whiteout)
ret += xfs_parent_calc_space_res(mp, src_namelen);
ret += 2 * xfs_parent_calc_space_res(mp, target_namelen);
- }
- if (target_exists)
- ret += xfs_parent_calc_space_res(mp, target_namelen);
+ if (target_exists)
+ ret += xfs_parent_calc_space_res(mp, target_namelen);
+ }
return ret;
}
diff --git a/fs/xfs/libxfs/xfs_types.c b/fs/xfs/libxfs/xfs_types.c
index 67c947a47f14..f195a04dbf66 100644
--- a/fs/xfs/libxfs/xfs_types.c
+++ b/fs/xfs/libxfs/xfs_types.c
@@ -222,7 +222,6 @@ xfs_verify_icount(
/* Sanity-checking of dir/attr block offsets. */
bool
xfs_verify_dablk(
- struct xfs_mount *mp,
xfs_fileoff_t dabno)
{
xfs_dablk_t max_dablk = -1U;
@@ -233,7 +232,6 @@ xfs_verify_dablk(
/* Check that a file block offset does not exceed the maximum. */
bool
xfs_verify_fileoff(
- struct xfs_mount *mp,
xfs_fileoff_t off)
{
return off <= XFS_MAX_FILEOFF;
@@ -242,15 +240,14 @@ xfs_verify_fileoff(
/* Check that a range of file block offsets do not exceed the maximum. */
bool
xfs_verify_fileext(
- struct xfs_mount *mp,
xfs_fileoff_t off,
xfs_fileoff_t len)
{
if (off + len <= off)
return false;
- if (!xfs_verify_fileoff(mp, off))
+ if (!xfs_verify_fileoff(off))
return false;
- return xfs_verify_fileoff(mp, off + len - 1);
+ return xfs_verify_fileoff(off + len - 1);
}
diff --git a/fs/xfs/libxfs/xfs_types.h b/fs/xfs/libxfs/xfs_types.h
index f6f4f2d4b5db..19dd5e7c8b12 100644
--- a/fs/xfs/libxfs/xfs_types.h
+++ b/fs/xfs/libxfs/xfs_types.h
@@ -277,11 +277,10 @@ bool xfs_verify_rtbno(struct xfs_mount *mp, xfs_rtblock_t rtbno);
bool xfs_verify_rtbext(struct xfs_mount *mp, xfs_rtblock_t rtbno,
xfs_filblks_t len);
bool xfs_verify_icount(struct xfs_mount *mp, unsigned long long icount);
-bool xfs_verify_dablk(struct xfs_mount *mp, xfs_fileoff_t off);
+bool xfs_verify_dablk(xfs_fileoff_t off);
void xfs_icount_range(struct xfs_mount *mp, unsigned long long *min,
unsigned long long *max);
-bool xfs_verify_fileoff(struct xfs_mount *mp, xfs_fileoff_t off);
-bool xfs_verify_fileext(struct xfs_mount *mp, xfs_fileoff_t off,
- xfs_fileoff_t len);
+bool xfs_verify_fileoff(xfs_fileoff_t off);
+bool xfs_verify_fileext(xfs_fileoff_t off, xfs_fileoff_t len);
#endif /* __XFS_TYPES_H__ */