xfs: make the record pointer passed to query_range functions const
The query_range functions are supposed to call a caller-supplied function on each record found in the dataset. These functions don't own the memory storing the record, so don't let them change the record. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
04dcb47482
commit
159eb69dba
@ -3392,7 +3392,7 @@ struct xfs_alloc_query_range_info {
|
||||
STATIC int
|
||||
xfs_alloc_query_range_helper(
|
||||
struct xfs_btree_cur *cur,
|
||||
union xfs_btree_rec *rec,
|
||||
const union xfs_btree_rec *rec,
|
||||
void *priv)
|
||||
{
|
||||
struct xfs_alloc_query_range_info *query = priv;
|
||||
|
@ -220,9 +220,9 @@ int xfs_free_extent_fix_freelist(struct xfs_trans *tp, struct xfs_perag *pag,
|
||||
xfs_extlen_t xfs_prealloc_blocks(struct xfs_mount *mp);
|
||||
|
||||
typedef int (*xfs_alloc_query_range_fn)(
|
||||
struct xfs_btree_cur *cur,
|
||||
struct xfs_alloc_rec_incore *rec,
|
||||
void *priv);
|
||||
struct xfs_btree_cur *cur,
|
||||
const struct xfs_alloc_rec_incore *rec,
|
||||
void *priv);
|
||||
|
||||
int xfs_alloc_query_range(struct xfs_btree_cur *cur,
|
||||
const struct xfs_alloc_rec_incore *low_rec,
|
||||
|
@ -4877,7 +4877,7 @@ xfs_btree_diff_two_ptrs(
|
||||
STATIC int
|
||||
xfs_btree_has_record_helper(
|
||||
struct xfs_btree_cur *cur,
|
||||
union xfs_btree_rec *rec,
|
||||
const union xfs_btree_rec *rec,
|
||||
void *priv)
|
||||
{
|
||||
return -ECANCELED;
|
||||
|
@ -471,7 +471,7 @@ unsigned long long xfs_btree_calc_size(uint *limits, unsigned long long len);
|
||||
* code on its own.
|
||||
*/
|
||||
typedef int (*xfs_btree_query_range_fn)(struct xfs_btree_cur *cur,
|
||||
union xfs_btree_rec *rec, void *priv);
|
||||
const union xfs_btree_rec *rec, void *priv);
|
||||
|
||||
int xfs_btree_query_range(struct xfs_btree_cur *cur,
|
||||
const union xfs_btree_irec *low_rec,
|
||||
|
@ -74,7 +74,7 @@ xfs_inobt_update(
|
||||
void
|
||||
xfs_inobt_btrec_to_irec(
|
||||
struct xfs_mount *mp,
|
||||
union xfs_btree_rec *rec,
|
||||
const union xfs_btree_rec *rec,
|
||||
struct xfs_inobt_rec_incore *irec)
|
||||
{
|
||||
irec->ir_startino = be32_to_cpu(rec->inobt.ir_startino);
|
||||
@ -2716,7 +2716,7 @@ struct xfs_ialloc_count_inodes {
|
||||
STATIC int
|
||||
xfs_ialloc_count_inodes_rec(
|
||||
struct xfs_btree_cur *cur,
|
||||
union xfs_btree_rec *rec,
|
||||
const union xfs_btree_rec *rec,
|
||||
void *priv)
|
||||
{
|
||||
struct xfs_inobt_rec_incore irec;
|
||||
|
@ -106,7 +106,8 @@ int xfs_read_agi(struct xfs_mount *mp, struct xfs_trans *tp,
|
||||
xfs_agnumber_t agno, struct xfs_buf **bpp);
|
||||
|
||||
union xfs_btree_rec;
|
||||
void xfs_inobt_btrec_to_irec(struct xfs_mount *mp, union xfs_btree_rec *rec,
|
||||
void xfs_inobt_btrec_to_irec(struct xfs_mount *mp,
|
||||
const union xfs_btree_rec *rec,
|
||||
struct xfs_inobt_rec_incore *irec);
|
||||
int xfs_ialloc_has_inodes_at_extent(struct xfs_btree_cur *cur,
|
||||
xfs_agblock_t bno, xfs_extlen_t len, bool *exists);
|
||||
|
@ -91,7 +91,7 @@ xfs_refcount_lookup_eq(
|
||||
/* Convert on-disk record to in-core format. */
|
||||
void
|
||||
xfs_refcount_btrec_to_irec(
|
||||
union xfs_btree_rec *rec,
|
||||
const union xfs_btree_rec *rec,
|
||||
struct xfs_refcount_irec *irec)
|
||||
{
|
||||
irec->rc_startblock = be32_to_cpu(rec->refc.rc_startblock);
|
||||
@ -1654,7 +1654,7 @@ struct xfs_refcount_recovery {
|
||||
STATIC int
|
||||
xfs_refcount_recover_extent(
|
||||
struct xfs_btree_cur *cur,
|
||||
union xfs_btree_rec *rec,
|
||||
const union xfs_btree_rec *rec,
|
||||
void *priv)
|
||||
{
|
||||
struct list_head *debris = priv;
|
||||
|
@ -78,7 +78,7 @@ static inline xfs_fileoff_t xfs_refcount_max_unmap(int log_res)
|
||||
extern int xfs_refcount_has_record(struct xfs_btree_cur *cur,
|
||||
xfs_agblock_t bno, xfs_extlen_t len, bool *exists);
|
||||
union xfs_btree_rec;
|
||||
extern void xfs_refcount_btrec_to_irec(union xfs_btree_rec *rec,
|
||||
extern void xfs_refcount_btrec_to_irec(const union xfs_btree_rec *rec,
|
||||
struct xfs_refcount_irec *irec);
|
||||
extern int xfs_refcount_insert(struct xfs_btree_cur *cur,
|
||||
struct xfs_refcount_irec *irec, int *stat);
|
||||
|
@ -179,8 +179,8 @@ done:
|
||||
/* Convert an internal btree record to an rmap record. */
|
||||
int
|
||||
xfs_rmap_btrec_to_irec(
|
||||
union xfs_btree_rec *rec,
|
||||
struct xfs_rmap_irec *irec)
|
||||
const union xfs_btree_rec *rec,
|
||||
struct xfs_rmap_irec *irec)
|
||||
{
|
||||
irec->rm_startblock = be32_to_cpu(rec->rmap.rm_startblock);
|
||||
irec->rm_blockcount = be32_to_cpu(rec->rmap.rm_blockcount);
|
||||
@ -255,9 +255,9 @@ struct xfs_find_left_neighbor_info {
|
||||
/* For each rmap given, figure out if it matches the key we want. */
|
||||
STATIC int
|
||||
xfs_rmap_find_left_neighbor_helper(
|
||||
struct xfs_btree_cur *cur,
|
||||
struct xfs_rmap_irec *rec,
|
||||
void *priv)
|
||||
struct xfs_btree_cur *cur,
|
||||
const struct xfs_rmap_irec *rec,
|
||||
void *priv)
|
||||
{
|
||||
struct xfs_find_left_neighbor_info *info = priv;
|
||||
|
||||
@ -331,9 +331,9 @@ xfs_rmap_find_left_neighbor(
|
||||
/* For each rmap given, figure out if it matches the key we want. */
|
||||
STATIC int
|
||||
xfs_rmap_lookup_le_range_helper(
|
||||
struct xfs_btree_cur *cur,
|
||||
struct xfs_rmap_irec *rec,
|
||||
void *priv)
|
||||
struct xfs_btree_cur *cur,
|
||||
const struct xfs_rmap_irec *rec,
|
||||
void *priv)
|
||||
{
|
||||
struct xfs_find_left_neighbor_info *info = priv;
|
||||
|
||||
@ -2278,9 +2278,9 @@ struct xfs_rmap_query_range_info {
|
||||
/* Format btree record and pass to our callback. */
|
||||
STATIC int
|
||||
xfs_rmap_query_range_helper(
|
||||
struct xfs_btree_cur *cur,
|
||||
union xfs_btree_rec *rec,
|
||||
void *priv)
|
||||
struct xfs_btree_cur *cur,
|
||||
const union xfs_btree_rec *rec,
|
||||
void *priv)
|
||||
{
|
||||
struct xfs_rmap_query_range_info *query = priv;
|
||||
struct xfs_rmap_irec irec;
|
||||
@ -2707,7 +2707,7 @@ struct xfs_rmap_key_state {
|
||||
STATIC int
|
||||
xfs_rmap_has_other_keys_helper(
|
||||
struct xfs_btree_cur *cur,
|
||||
struct xfs_rmap_irec *rec,
|
||||
const struct xfs_rmap_irec *rec,
|
||||
void *priv)
|
||||
{
|
||||
struct xfs_rmap_key_state *rks = priv;
|
||||
|
@ -134,9 +134,9 @@ int xfs_rmap_get_rec(struct xfs_btree_cur *cur, struct xfs_rmap_irec *irec,
|
||||
int *stat);
|
||||
|
||||
typedef int (*xfs_rmap_query_range_fn)(
|
||||
struct xfs_btree_cur *cur,
|
||||
struct xfs_rmap_irec *rec,
|
||||
void *priv);
|
||||
struct xfs_btree_cur *cur,
|
||||
const struct xfs_rmap_irec *rec,
|
||||
void *priv);
|
||||
|
||||
int xfs_rmap_query_range(struct xfs_btree_cur *cur,
|
||||
const struct xfs_rmap_irec *low_rec,
|
||||
@ -193,7 +193,7 @@ int xfs_rmap_lookup_le_range(struct xfs_btree_cur *cur, xfs_agblock_t bno,
|
||||
int xfs_rmap_compare(const struct xfs_rmap_irec *a,
|
||||
const struct xfs_rmap_irec *b);
|
||||
union xfs_btree_rec;
|
||||
int xfs_rmap_btrec_to_irec(union xfs_btree_rec *rec,
|
||||
int xfs_rmap_btrec_to_irec(const union xfs_btree_rec *rec,
|
||||
struct xfs_rmap_irec *irec);
|
||||
int xfs_rmap_has_record(struct xfs_btree_cur *cur, xfs_agblock_t bno,
|
||||
xfs_extlen_t len, bool *exists);
|
||||
|
@ -357,7 +357,7 @@ out_pag:
|
||||
STATIC int
|
||||
xchk_agf_record_bno_lengths(
|
||||
struct xfs_btree_cur *cur,
|
||||
struct xfs_alloc_rec_incore *rec,
|
||||
const struct xfs_alloc_rec_incore *rec,
|
||||
void *priv)
|
||||
{
|
||||
xfs_extlen_t *blocks = priv;
|
||||
|
@ -70,7 +70,7 @@ struct xrep_agf_allocbt {
|
||||
STATIC int
|
||||
xrep_agf_walk_allocbt(
|
||||
struct xfs_btree_cur *cur,
|
||||
struct xfs_alloc_rec_incore *rec,
|
||||
const struct xfs_alloc_rec_incore *rec,
|
||||
void *priv)
|
||||
{
|
||||
struct xrep_agf_allocbt *raa = priv;
|
||||
@ -443,7 +443,7 @@ struct xrep_agfl {
|
||||
STATIC int
|
||||
xrep_agfl_walk_rmap(
|
||||
struct xfs_btree_cur *cur,
|
||||
struct xfs_rmap_irec *rec,
|
||||
const struct xfs_rmap_irec *rec,
|
||||
void *priv)
|
||||
{
|
||||
struct xrep_agfl *ra = priv;
|
||||
|
@ -473,10 +473,11 @@ struct xchk_bmap_check_rmap_info {
|
||||
STATIC int
|
||||
xchk_bmap_check_rmap(
|
||||
struct xfs_btree_cur *cur,
|
||||
struct xfs_rmap_irec *rec,
|
||||
const struct xfs_rmap_irec *rec,
|
||||
void *priv)
|
||||
{
|
||||
struct xfs_bmbt_irec irec;
|
||||
struct xfs_rmap_irec check_rec;
|
||||
struct xchk_bmap_check_rmap_info *sbcri = priv;
|
||||
struct xfs_ifork *ifp;
|
||||
struct xfs_scrub *sc = sbcri->sc;
|
||||
@ -510,28 +511,30 @@ xchk_bmap_check_rmap(
|
||||
* length, so we have to loop through the bmbt to make sure that the
|
||||
* entire rmap is covered by bmbt records.
|
||||
*/
|
||||
check_rec = *rec;
|
||||
while (have_map) {
|
||||
if (irec.br_startoff != rec->rm_offset)
|
||||
if (irec.br_startoff != check_rec.rm_offset)
|
||||
xchk_fblock_set_corrupt(sc, sbcri->whichfork,
|
||||
rec->rm_offset);
|
||||
check_rec.rm_offset);
|
||||
if (irec.br_startblock != XFS_AGB_TO_FSB(sc->mp,
|
||||
cur->bc_ag.pag->pag_agno, rec->rm_startblock))
|
||||
cur->bc_ag.pag->pag_agno,
|
||||
check_rec.rm_startblock))
|
||||
xchk_fblock_set_corrupt(sc, sbcri->whichfork,
|
||||
rec->rm_offset);
|
||||
if (irec.br_blockcount > rec->rm_blockcount)
|
||||
check_rec.rm_offset);
|
||||
if (irec.br_blockcount > check_rec.rm_blockcount)
|
||||
xchk_fblock_set_corrupt(sc, sbcri->whichfork,
|
||||
rec->rm_offset);
|
||||
check_rec.rm_offset);
|
||||
if (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT)
|
||||
break;
|
||||
rec->rm_startblock += irec.br_blockcount;
|
||||
rec->rm_offset += irec.br_blockcount;
|
||||
rec->rm_blockcount -= irec.br_blockcount;
|
||||
if (rec->rm_blockcount == 0)
|
||||
check_rec.rm_startblock += irec.br_blockcount;
|
||||
check_rec.rm_offset += irec.br_blockcount;
|
||||
check_rec.rm_blockcount -= irec.br_blockcount;
|
||||
if (check_rec.rm_blockcount == 0)
|
||||
break;
|
||||
have_map = xfs_iext_next_extent(ifp, &sbcri->icur, &irec);
|
||||
if (!have_map)
|
||||
xchk_fblock_set_corrupt(sc, sbcri->whichfork,
|
||||
rec->rm_offset);
|
||||
check_rec.rm_offset);
|
||||
}
|
||||
|
||||
out:
|
||||
|
@ -324,7 +324,7 @@ struct xchk_rmap_ownedby_info {
|
||||
STATIC int
|
||||
xchk_count_rmap_ownedby_irec(
|
||||
struct xfs_btree_cur *cur,
|
||||
struct xfs_rmap_irec *rec,
|
||||
const struct xfs_rmap_irec *rec,
|
||||
void *priv)
|
||||
{
|
||||
struct xchk_rmap_ownedby_info *sroi = priv;
|
||||
|
@ -91,7 +91,7 @@ struct xchk_refcnt_check {
|
||||
STATIC int
|
||||
xchk_refcountbt_rmap_check(
|
||||
struct xfs_btree_cur *cur,
|
||||
struct xfs_rmap_irec *rec,
|
||||
const struct xfs_rmap_irec *rec,
|
||||
void *priv)
|
||||
{
|
||||
struct xchk_refcnt_check *refchk = priv;
|
||||
|
@ -833,7 +833,7 @@ out:
|
||||
STATIC int
|
||||
xrep_findroot_rmap(
|
||||
struct xfs_btree_cur *cur,
|
||||
struct xfs_rmap_irec *rec,
|
||||
const struct xfs_rmap_irec *rec,
|
||||
void *priv)
|
||||
{
|
||||
struct xrep_findroot *ri = priv;
|
||||
|
@ -41,7 +41,7 @@ xchk_setup_rt(
|
||||
STATIC int
|
||||
xchk_rtbitmap_rec(
|
||||
struct xfs_trans *tp,
|
||||
struct xfs_rtalloc_rec *rec,
|
||||
const struct xfs_rtalloc_rec *rec,
|
||||
void *priv)
|
||||
{
|
||||
struct xfs_scrub *sc = priv;
|
||||
|
@ -111,8 +111,8 @@ xfs_fsmap_owner_to_rmap(
|
||||
/* Convert an rmapbt owner into an fsmap owner. */
|
||||
static int
|
||||
xfs_fsmap_owner_from_rmap(
|
||||
struct xfs_fsmap *dest,
|
||||
struct xfs_rmap_irec *src)
|
||||
struct xfs_fsmap *dest,
|
||||
const struct xfs_rmap_irec *src)
|
||||
{
|
||||
dest->fmr_flags = 0;
|
||||
if (!XFS_RMAP_NON_INODE_OWNER(src->rm_owner)) {
|
||||
@ -192,7 +192,7 @@ STATIC int
|
||||
xfs_getfsmap_is_shared(
|
||||
struct xfs_trans *tp,
|
||||
struct xfs_getfsmap_info *info,
|
||||
struct xfs_rmap_irec *rec,
|
||||
const struct xfs_rmap_irec *rec,
|
||||
bool *stat)
|
||||
{
|
||||
struct xfs_mount *mp = tp->t_mountp;
|
||||
@ -245,7 +245,7 @@ STATIC int
|
||||
xfs_getfsmap_helper(
|
||||
struct xfs_trans *tp,
|
||||
struct xfs_getfsmap_info *info,
|
||||
struct xfs_rmap_irec *rec,
|
||||
const struct xfs_rmap_irec *rec,
|
||||
xfs_daddr_t rec_daddr)
|
||||
{
|
||||
struct xfs_fsmap fmr;
|
||||
@ -347,7 +347,7 @@ out:
|
||||
STATIC int
|
||||
xfs_getfsmap_datadev_helper(
|
||||
struct xfs_btree_cur *cur,
|
||||
struct xfs_rmap_irec *rec,
|
||||
const struct xfs_rmap_irec *rec,
|
||||
void *priv)
|
||||
{
|
||||
struct xfs_mount *mp = cur->bc_mp;
|
||||
@ -365,7 +365,7 @@ xfs_getfsmap_datadev_helper(
|
||||
STATIC int
|
||||
xfs_getfsmap_datadev_bnobt_helper(
|
||||
struct xfs_btree_cur *cur,
|
||||
struct xfs_alloc_rec_incore *rec,
|
||||
const struct xfs_alloc_rec_incore *rec,
|
||||
void *priv)
|
||||
{
|
||||
struct xfs_mount *mp = cur->bc_mp;
|
||||
@ -451,7 +451,7 @@ xfs_getfsmap_logdev(
|
||||
STATIC int
|
||||
xfs_getfsmap_rtdev_rtbitmap_helper(
|
||||
struct xfs_trans *tp,
|
||||
struct xfs_rtalloc_rec *rec,
|
||||
const struct xfs_rtalloc_rec *rec,
|
||||
void *priv)
|
||||
{
|
||||
struct xfs_mount *mp = tp->t_mountp;
|
||||
|
@ -22,9 +22,9 @@ struct xfs_rtalloc_rec {
|
||||
};
|
||||
|
||||
typedef int (*xfs_rtalloc_query_range_fn)(
|
||||
struct xfs_trans *tp,
|
||||
struct xfs_rtalloc_rec *rec,
|
||||
void *priv);
|
||||
struct xfs_trans *tp,
|
||||
const struct xfs_rtalloc_rec *rec,
|
||||
void *priv);
|
||||
|
||||
#ifdef CONFIG_XFS_RT
|
||||
/*
|
||||
|
@ -3395,7 +3395,7 @@ DEFINE_INODE_ERROR_EVENT(xfs_swap_extent_rmap_error);
|
||||
/* fsmap traces */
|
||||
DECLARE_EVENT_CLASS(xfs_fsmap_class,
|
||||
TP_PROTO(struct xfs_mount *mp, u32 keydev, xfs_agnumber_t agno,
|
||||
struct xfs_rmap_irec *rmap),
|
||||
const struct xfs_rmap_irec *rmap),
|
||||
TP_ARGS(mp, keydev, agno, rmap),
|
||||
TP_STRUCT__entry(
|
||||
__field(dev_t, dev)
|
||||
@ -3430,7 +3430,7 @@ DECLARE_EVENT_CLASS(xfs_fsmap_class,
|
||||
#define DEFINE_FSMAP_EVENT(name) \
|
||||
DEFINE_EVENT(xfs_fsmap_class, name, \
|
||||
TP_PROTO(struct xfs_mount *mp, u32 keydev, xfs_agnumber_t agno, \
|
||||
struct xfs_rmap_irec *rmap), \
|
||||
const struct xfs_rmap_irec *rmap), \
|
||||
TP_ARGS(mp, keydev, agno, rmap))
|
||||
DEFINE_FSMAP_EVENT(xfs_fsmap_low_key);
|
||||
DEFINE_FSMAP_EVENT(xfs_fsmap_high_key);
|
||||
|
Loading…
Reference in New Issue
Block a user