]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
xfs: make the record pointer passed to query_range functions const
authorDarrick J. Wong <djwong@kernel.org>
Wed, 11 Aug 2021 00:02:16 +0000 (17:02 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Thu, 19 Aug 2021 01:46:01 +0000 (18:46 -0700)
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>
20 files changed:
fs/xfs/libxfs/xfs_alloc.c
fs/xfs/libxfs/xfs_alloc.h
fs/xfs/libxfs/xfs_btree.c
fs/xfs/libxfs/xfs_btree.h
fs/xfs/libxfs/xfs_ialloc.c
fs/xfs/libxfs/xfs_ialloc.h
fs/xfs/libxfs/xfs_refcount.c
fs/xfs/libxfs/xfs_refcount.h
fs/xfs/libxfs/xfs_rmap.c
fs/xfs/libxfs/xfs_rmap.h
fs/xfs/scrub/agheader.c
fs/xfs/scrub/agheader_repair.c
fs/xfs/scrub/bmap.c
fs/xfs/scrub/common.c
fs/xfs/scrub/refcount.c
fs/xfs/scrub/repair.c
fs/xfs/scrub/rtbitmap.c
fs/xfs/xfs_fsmap.c
fs/xfs/xfs_rtalloc.h
fs/xfs/xfs_trace.h

index d5ee19ae02eb8a92317c7cc738b188033d60d5f1..8cc6c16719015b32a17d4193c51be19e5a9c8931 100644 (file)
@@ -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;
index 3554b7d420f0b16adda39d10706877214db25cbd..e14c56938bacc278e2800c108b112b7cca728c23 100644 (file)
@@ -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,
index c91f084e555edc024262120f9abc287aa1ab2513..bc15d90ff7a21b484e09bcde9021dccb447f865c 100644 (file)
@@ -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;
index 462c25857a2647bd5bdf3eefb76290c4e5814d07..e83836a984e40fc15a8b3be5d0a86e5620356747 100644 (file)
@@ -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,
index 19eb7ec0103f131691cdae06a62a56b36d9af493..99b331983e9b258e7fc616b78c067eb61a287689 100644 (file)
@@ -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;
index 9a2112b4ad5eee80656d4682de5056e1c4a5f99d..8b5c2b7090228f2b027b3e9d194fbdafbbba09c0 100644 (file)
@@ -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);
index 860a0c9801ba0ed36adbb8627285b81770443897..5f46dbe8c8d966606ba2fbd6c2120da31ebc8de3 100644 (file)
@@ -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;
index 9f6e9aae4da026d5d5ec528dba176a15005be255..02cb3aa405be5119a5c6b687aae14922fc9b4925 100644 (file)
@@ -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);
index c38342b27935cee40a7da15e8451d43d6b3a8795..76dc79f85dfff6801cc399574a355c5d785bd822 100644 (file)
@@ -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;
index 1354efc4ddabea422d567509f41b36c38c3f915c..fd67904ed446fea5d21e1b58932d587568c114dd 100644 (file)
@@ -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);
index efd8b5a9f6b2fb5354ac63a6038cba414a404de5..f99a92f361d7a31cfbf0cf74cb81bab564dc9991 100644 (file)
@@ -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;
index 87da9bca8e578df314b6b93775ca885225b4f1dd..83ef97aa1cabefee6ad8b7336bf5b44942c7d1f4 100644 (file)
@@ -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;
index 678afceeb16bc891a5dad858b86b8cbf14e0cd3b..ea701f5ca32bba77e63b173907533c48af3192ba 100644 (file)
@@ -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:
index 691cf243c2c94f13c57b22e0c8bac57f28bdae44..439f035a3a302b203cac18836777f60e2e2863d4 100644 (file)
@@ -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;
index 7014b7408baddcc64c8c6bc50d629270f0fba59e..c547e5ca320708baa7fb08d2f338775fb86e182a 100644 (file)
@@ -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;
index 7431e181d0013b31b856f75e05720d4681f0b406..ebe3c08b447866f75cdd2c1b95eb5094894ff30f 100644 (file)
@@ -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;
index 37c0e2266c85fe91cba9c73d31f331b050e0cc16..8fa012057405d378ae93afaa29eed409c3277bd4 100644 (file)
@@ -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;
index 5a67e543f9d02905d38af942097e09a65d7ee63d..fe376b8fc7f61b0bd963d4e1d6c67c2287ce94c9 100644 (file)
@@ -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;
index 51097cb24311dd71ca2c782e3d5ca5944196282f..91b00289509b117e20b1088b77c468d528aed2f5 100644 (file)
@@ -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
 /*
index 84199e29845ddbc2ae30d85568ab5e60485f33a6..7e04a6adb34957f37182e4900dafa73fbf9bb2f9 100644 (file)
@@ -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);