From: kernel test robot <lkp@intel.com>
To: Brian Foster <bfoster@redhat.com>
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev,
Mike Snitzer <snitzer@kernel.org>
Subject: [snitzer:dm-6.5-thin-reserve-throwaway 10/10] fs/xfs/scrub/agheader.c:175:32: warning: implicit conversion from 'int' to '__u16' (aka 'unsigned short') changes value from -49265 to 16271
Date: Tue, 6 Jun 2023 16:37:31 +0800 [thread overview]
Message-ID: <202306061608.Yy2mDyj4-lkp@intel.com> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/snitzer/linux.git dm-6.5-thin-reserve-throwaway
head: 71cbdb2ba4c52501e72d5738c0beea4a43bba53e
commit: 71cbdb2ba4c52501e72d5738c0beea4a43bba53e [10/10] xfs, block, dm-thin: dynamic block reservation support
config: hexagon-randconfig-r045-20230606 (https://download.01.org/0day-ci/archive/20230606/202306061608.Yy2mDyj4-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
reproduce (this is a W=1 build):
mkdir -p ~/bin
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://git.kernel.org/pub/scm/linux/kernel/git/snitzer/linux.git/commit/?id=71cbdb2ba4c52501e72d5738c0beea4a43bba53e
git remote add snitzer https://git.kernel.org/pub/scm/linux/kernel/git/snitzer/linux.git
git fetch --no-tags snitzer dm-6.5-thin-reserve-throwaway
git checkout 71cbdb2ba4c52501e72d5738c0beea4a43bba53e
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang ~/bin/make.cross W=1 O=build_dir ARCH=hexagon olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang ~/bin/make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash fs/xfs/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202306061608.Yy2mDyj4-lkp@intel.com/
All warnings (new ones prefixed by >>):
In file included from fs/xfs/scrub/agheader.c:6:
In file included from fs/xfs/xfs.h:22:
In file included from fs/xfs/xfs_linux.h:31:
In file included from include/linux/blkdev.h:9:
In file included from include/linux/blk_types.h:10:
In file included from include/linux/bvec.h:10:
In file included from include/linux/highmem.h:12:
In file included from include/linux/hardirq.h:11:
In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/hexagon/include/asm/io.h:334:
include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
547 | val = __raw_readb(PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
560 | val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
| ~~~~~~~~~~ ^
include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu'
37 | #define __le16_to_cpu(x) ((__force __u16)(__le16)(x))
| ^
In file included from fs/xfs/scrub/agheader.c:6:
In file included from fs/xfs/xfs.h:22:
In file included from fs/xfs/xfs_linux.h:31:
In file included from include/linux/blkdev.h:9:
In file included from include/linux/blk_types.h:10:
In file included from include/linux/bvec.h:10:
In file included from include/linux/highmem.h:12:
In file included from include/linux/hardirq.h:11:
In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/hexagon/include/asm/io.h:334:
include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
573 | val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
| ~~~~~~~~~~ ^
include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu'
35 | #define __le32_to_cpu(x) ((__force __u32)(__le32)(x))
| ^
In file included from fs/xfs/scrub/agheader.c:6:
In file included from fs/xfs/xfs.h:22:
In file included from fs/xfs/xfs_linux.h:31:
In file included from include/linux/blkdev.h:9:
In file included from include/linux/blk_types.h:10:
In file included from include/linux/bvec.h:10:
In file included from include/linux/highmem.h:12:
In file included from include/linux/hardirq.h:11:
In file included from ./arch/hexagon/include/generated/asm/hardirq.h:1:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/hexagon/include/asm/io.h:334:
include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
584 | __raw_writeb(value, PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
594 | __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
604 | __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
In file included from fs/xfs/scrub/agheader.c:11:
fs/xfs/xfs_mount.h:549:59: error: expected ')'
549 | return xfs_mod_freecounter(mp, &mp->m_frextents, delta, 0;
| ^
fs/xfs/xfs_mount.h:549:28: note: to match this '('
549 | return xfs_mod_freecounter(mp, &mp->m_frextents, delta, 0;
| ^
>> fs/xfs/scrub/agheader.c:175:32: warning: implicit conversion from 'int' to '__u16' (aka 'unsigned short') changes value from -49265 to 16271 [-Wconstant-conversion]
175 | vernum_mask = cpu_to_be16(~XFS_SB_VERSION_OKBITS |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
176 | XFS_SB_VERSION_NUMBITS |
| ~~~~~~~~~~~~~~~~~~~~~~~~
177 | XFS_SB_VERSION_ALIGNBIT |
| ~~~~~~~~~~~~~~~~~~~~~~~~~
178 | XFS_SB_VERSION_DALIGNBIT |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~
179 | XFS_SB_VERSION_SHAREDBIT |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~
180 | XFS_SB_VERSION_LOGV2BIT |
| ~~~~~~~~~~~~~~~~~~~~~~~~~
181 | XFS_SB_VERSION_SECTORBIT |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~
182 | XFS_SB_VERSION_EXTFLGBIT |
| ~~~~~~~~~~~~~~~~~~~~~~~~~^
183 | XFS_SB_VERSION_DIRV2BIT);
| ~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/byteorder/generic.h:96:21: note: expanded from macro 'cpu_to_be16'
96 | #define cpu_to_be16 __cpu_to_be16
| ^
include/uapi/linux/byteorder/little_endian.h:42:53: note: expanded from macro '__cpu_to_be16'
42 | #define __cpu_to_be16(x) ((__force __be16)__swab16((x)))
| ~~~~~~~~~~^~~
include/uapi/linux/swab.h:107:12: note: expanded from macro '__swab16'
107 | __fswab16(x))
| ~~~~~~~~~ ^
7 warnings and 1 error generated.
vim +175 fs/xfs/scrub/agheader.c
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 @11 #include "xfs_mount.h"
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 12 #include "xfs_btree.h"
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 13 #include "xfs_sb.h"
ab9d5dc59fe615 Darrick J. Wong 2017-10-17 14 #include "xfs_alloc.h"
a12890aebb8959 Darrick J. Wong 2017-10-17 15 #include "xfs_ialloc.h"
d852657ccfc0e4 Darrick J. Wong 2018-01-16 16 #include "xfs_rmap.h"
9bbafc71919adf Dave Chinner 2021-06-02 17 #include "xfs_ag.h"
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 18 #include "scrub/scrub.h"
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 19 #include "scrub/common.h"
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 20
466c525d6d35e6 Darrick J. Wong 2023-04-11 21 int
466c525d6d35e6 Darrick J. Wong 2023-04-11 22 xchk_setup_agheader(
466c525d6d35e6 Darrick J. Wong 2023-04-11 23 struct xfs_scrub *sc)
466c525d6d35e6 Darrick J. Wong 2023-04-11 24 {
466c525d6d35e6 Darrick J. Wong 2023-04-11 25 if (xchk_need_intent_drain(sc))
466c525d6d35e6 Darrick J. Wong 2023-04-11 26 xchk_fsgates_enable(sc, XCHK_FSGATES_DRAIN);
466c525d6d35e6 Darrick J. Wong 2023-04-11 27 return xchk_setup_fs(sc);
466c525d6d35e6 Darrick J. Wong 2023-04-11 28 }
466c525d6d35e6 Darrick J. Wong 2023-04-11 29
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 30 /* Superblock */
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 31
166d76410d7ac0 Darrick J. Wong 2018-01-16 32 /* Cross-reference with the other btrees. */
166d76410d7ac0 Darrick J. Wong 2018-01-16 33 STATIC void
c517b3aa02cff1 Darrick J. Wong 2018-07-19 34 xchk_superblock_xref(
1d8a748a8aa94a Darrick J. Wong 2018-07-19 35 struct xfs_scrub *sc,
166d76410d7ac0 Darrick J. Wong 2018-01-16 36 struct xfs_buf *bp)
166d76410d7ac0 Darrick J. Wong 2018-01-16 37 {
52dc4b44af7419 Darrick J. Wong 2018-01-16 38 struct xfs_mount *mp = sc->mp;
52dc4b44af7419 Darrick J. Wong 2018-01-16 39 xfs_agnumber_t agno = sc->sm->sm_agno;
52dc4b44af7419 Darrick J. Wong 2018-01-16 40 xfs_agblock_t agbno;
52dc4b44af7419 Darrick J. Wong 2018-01-16 41 int error;
52dc4b44af7419 Darrick J. Wong 2018-01-16 42
166d76410d7ac0 Darrick J. Wong 2018-01-16 43 if (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT)
166d76410d7ac0 Darrick J. Wong 2018-01-16 44 return;
52dc4b44af7419 Darrick J. Wong 2018-01-16 45
52dc4b44af7419 Darrick J. Wong 2018-01-16 46 agbno = XFS_SB_BLOCK(mp);
52dc4b44af7419 Darrick J. Wong 2018-01-16 47
48c6615cc55759 Darrick J. Wong 2021-08-06 48 error = xchk_ag_init_existing(sc, agno, &sc->sa);
c517b3aa02cff1 Darrick J. Wong 2018-07-19 49 if (!xchk_xref_process_error(sc, agno, agbno, &error))
52dc4b44af7419 Darrick J. Wong 2018-01-16 50 return;
52dc4b44af7419 Darrick J. Wong 2018-01-16 51
c517b3aa02cff1 Darrick J. Wong 2018-07-19 52 xchk_xref_is_used_space(sc, agbno, 1);
c517b3aa02cff1 Darrick J. Wong 2018-07-19 53 xchk_xref_is_not_inode_chunk(sc, agbno, 1);
69115f775f6e8e Darrick J. Wong 2023-04-11 54 xchk_xref_is_only_owned_by(sc, agbno, 1, &XFS_RMAP_OINFO_FS);
c517b3aa02cff1 Darrick J. Wong 2018-07-19 55 xchk_xref_is_not_shared(sc, agbno, 1);
7ac14fa2bd22e9 Darrick J. Wong 2023-04-11 56 xchk_xref_is_not_cow_staging(sc, agbno, 1);
52dc4b44af7419 Darrick J. Wong 2018-01-16 57
52dc4b44af7419 Darrick J. Wong 2018-01-16 58 /* scrub teardown will take care of sc->sa for us */
166d76410d7ac0 Darrick J. Wong 2018-01-16 59 }
166d76410d7ac0 Darrick J. Wong 2018-01-16 60
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 61 /*
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 62 * Scrub the filesystem superblock.
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 63 *
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 64 * Note: We do /not/ attempt to check AG 0's superblock. Mount is
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 65 * responsible for validating all the geometry information in sb 0, so
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 66 * if the filesystem is capable of initiating online scrub, then clearly
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 67 * sb 0 is ok and we can use its information to check everything else.
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 68 */
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 69 int
c517b3aa02cff1 Darrick J. Wong 2018-07-19 70 xchk_superblock(
1d8a748a8aa94a Darrick J. Wong 2018-07-19 71 struct xfs_scrub *sc)
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 72 {
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 73 struct xfs_mount *mp = sc->mp;
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 74 struct xfs_buf *bp;
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 75 struct xfs_dsb *sb;
48c6615cc55759 Darrick J. Wong 2021-08-06 76 struct xfs_perag *pag;
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 77 xfs_agnumber_t agno;
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 78 uint32_t v2_ok;
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 79 __be32 features_mask;
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 80 int error;
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 81 __be16 vernum_mask;
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 82
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 83 agno = sc->sm->sm_agno;
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 84 if (agno == 0)
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 85 return 0;
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 86
48c6615cc55759 Darrick J. Wong 2021-08-06 87 /*
48c6615cc55759 Darrick J. Wong 2021-08-06 88 * Grab an active reference to the perag structure. If we can't get
48c6615cc55759 Darrick J. Wong 2021-08-06 89 * it, we're racing with something that's tearing down the AG, so
48c6615cc55759 Darrick J. Wong 2021-08-06 90 * signal that the AG no longer exists.
48c6615cc55759 Darrick J. Wong 2021-08-06 91 */
48c6615cc55759 Darrick J. Wong 2021-08-06 92 pag = xfs_perag_get(mp, agno);
48c6615cc55759 Darrick J. Wong 2021-08-06 93 if (!pag)
48c6615cc55759 Darrick J. Wong 2021-08-06 94 return -ENOENT;
48c6615cc55759 Darrick J. Wong 2021-08-06 95
689e11c84b1586 Darrick J. Wong 2018-05-14 96 error = xfs_sb_read_secondary(mp, sc->tp, agno, &bp);
e5b37faa932d79 Darrick J. Wong 2018-01-08 97 /*
e5b37faa932d79 Darrick J. Wong 2018-01-08 98 * The superblock verifier can return several different error codes
e5b37faa932d79 Darrick J. Wong 2018-01-08 99 * if it thinks the superblock doesn't look right. For a mount these
e5b37faa932d79 Darrick J. Wong 2018-01-08 100 * would all get bounced back to userspace, but if we're here then the
e5b37faa932d79 Darrick J. Wong 2018-01-08 101 * fs mounted successfully, which means that this secondary superblock
e5b37faa932d79 Darrick J. Wong 2018-01-08 102 * is simply incorrect. Treat all these codes the same way we treat
e5b37faa932d79 Darrick J. Wong 2018-01-08 103 * any corruption.
e5b37faa932d79 Darrick J. Wong 2018-01-08 104 */
e5b37faa932d79 Darrick J. Wong 2018-01-08 105 switch (error) {
e5b37faa932d79 Darrick J. Wong 2018-01-08 106 case -EINVAL: /* also -EWRONGFS */
e5b37faa932d79 Darrick J. Wong 2018-01-08 107 case -ENOSYS:
e5b37faa932d79 Darrick J. Wong 2018-01-08 108 case -EFBIG:
e5b37faa932d79 Darrick J. Wong 2018-01-08 109 error = -EFSCORRUPTED;
53004ee78d6273 Gustavo A. R. Silva 2021-04-20 110 fallthrough;
e5b37faa932d79 Darrick J. Wong 2018-01-08 111 default:
e5b37faa932d79 Darrick J. Wong 2018-01-08 112 break;
e5b37faa932d79 Darrick J. Wong 2018-01-08 113 }
c517b3aa02cff1 Darrick J. Wong 2018-07-19 114 if (!xchk_process_error(sc, agno, XFS_SB_BLOCK(mp), &error))
48c6615cc55759 Darrick J. Wong 2021-08-06 115 goto out_pag;
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 116
3e6e8afd3abb74 Christoph Hellwig 2020-03-10 117 sb = bp->b_addr;
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 118
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 119 /*
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 120 * Verify the geometries match. Fields that are permanently
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 121 * set by mkfs are checked; fields that can be updated later
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 122 * (and are not propagated to backup superblocks) are preen
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 123 * checked.
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 124 */
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 125 if (sb->sb_blocksize != cpu_to_be32(mp->m_sb.sb_blocksize))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 126 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 127
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 128 if (sb->sb_dblocks != cpu_to_be64(mp->m_sb.sb_dblocks))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 129 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 130
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 131 if (sb->sb_rblocks != cpu_to_be64(mp->m_sb.sb_rblocks))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 132 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 133
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 134 if (sb->sb_rextents != cpu_to_be64(mp->m_sb.sb_rextents))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 135 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 136
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 137 if (!uuid_equal(&sb->sb_uuid, &mp->m_sb.sb_uuid))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 138 xchk_block_set_preen(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 139
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 140 if (sb->sb_logstart != cpu_to_be64(mp->m_sb.sb_logstart))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 141 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 142
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 143 if (sb->sb_rootino != cpu_to_be64(mp->m_sb.sb_rootino))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 144 xchk_block_set_preen(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 145
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 146 if (sb->sb_rbmino != cpu_to_be64(mp->m_sb.sb_rbmino))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 147 xchk_block_set_preen(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 148
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 149 if (sb->sb_rsumino != cpu_to_be64(mp->m_sb.sb_rsumino))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 150 xchk_block_set_preen(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 151
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 152 if (sb->sb_rextsize != cpu_to_be32(mp->m_sb.sb_rextsize))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 153 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 154
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 155 if (sb->sb_agblocks != cpu_to_be32(mp->m_sb.sb_agblocks))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 156 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 157
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 158 if (sb->sb_agcount != cpu_to_be32(mp->m_sb.sb_agcount))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 159 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 160
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 161 if (sb->sb_rbmblocks != cpu_to_be32(mp->m_sb.sb_rbmblocks))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 162 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 163
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 164 if (sb->sb_logblocks != cpu_to_be32(mp->m_sb.sb_logblocks))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 165 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 166
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 167 /* Check sb_versionnum bits that are set at mkfs time. */
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 168 vernum_mask = cpu_to_be16(~XFS_SB_VERSION_OKBITS |
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 169 XFS_SB_VERSION_NUMBITS |
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 170 XFS_SB_VERSION_ALIGNBIT |
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 171 XFS_SB_VERSION_DALIGNBIT |
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 172 XFS_SB_VERSION_SHAREDBIT |
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 173 XFS_SB_VERSION_LOGV2BIT |
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 174 XFS_SB_VERSION_SECTORBIT |
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 @175 XFS_SB_VERSION_EXTFLGBIT |
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 176 XFS_SB_VERSION_DIRV2BIT);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 177 if ((sb->sb_versionnum & vernum_mask) !=
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 178 (cpu_to_be16(mp->m_sb.sb_versionnum) & vernum_mask))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 179 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 180
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 181 /* Check sb_versionnum bits that can be set after mkfs time. */
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 182 vernum_mask = cpu_to_be16(XFS_SB_VERSION_ATTRBIT |
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 183 XFS_SB_VERSION_NLINKBIT |
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 184 XFS_SB_VERSION_QUOTABIT);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 185 if ((sb->sb_versionnum & vernum_mask) !=
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 186 (cpu_to_be16(mp->m_sb.sb_versionnum) & vernum_mask))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 187 xchk_block_set_preen(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 188
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 189 if (sb->sb_sectsize != cpu_to_be16(mp->m_sb.sb_sectsize))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 190 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 191
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 192 if (sb->sb_inodesize != cpu_to_be16(mp->m_sb.sb_inodesize))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 193 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 194
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 195 if (sb->sb_inopblock != cpu_to_be16(mp->m_sb.sb_inopblock))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 196 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 197
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 198 if (memcmp(sb->sb_fname, mp->m_sb.sb_fname, sizeof(sb->sb_fname)))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 199 xchk_block_set_preen(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 200
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 201 if (sb->sb_blocklog != mp->m_sb.sb_blocklog)
c517b3aa02cff1 Darrick J. Wong 2018-07-19 202 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 203
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 204 if (sb->sb_sectlog != mp->m_sb.sb_sectlog)
c517b3aa02cff1 Darrick J. Wong 2018-07-19 205 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 206
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 207 if (sb->sb_inodelog != mp->m_sb.sb_inodelog)
c517b3aa02cff1 Darrick J. Wong 2018-07-19 208 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 209
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 210 if (sb->sb_inopblog != mp->m_sb.sb_inopblog)
c517b3aa02cff1 Darrick J. Wong 2018-07-19 211 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 212
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 213 if (sb->sb_agblklog != mp->m_sb.sb_agblklog)
c517b3aa02cff1 Darrick J. Wong 2018-07-19 214 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 215
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 216 if (sb->sb_rextslog != mp->m_sb.sb_rextslog)
c517b3aa02cff1 Darrick J. Wong 2018-07-19 217 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 218
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 219 if (sb->sb_imax_pct != mp->m_sb.sb_imax_pct)
c517b3aa02cff1 Darrick J. Wong 2018-07-19 220 xchk_block_set_preen(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 221
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 222 /*
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 223 * Skip the summary counters since we track them in memory anyway.
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 224 * sb_icount, sb_ifree, sb_fdblocks, sb_frexents
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 225 */
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 226
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 227 if (sb->sb_uquotino != cpu_to_be64(mp->m_sb.sb_uquotino))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 228 xchk_block_set_preen(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 229
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 230 if (sb->sb_gquotino != cpu_to_be64(mp->m_sb.sb_gquotino))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 231 xchk_block_set_preen(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 232
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 233 /*
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 234 * Skip the quota flags since repair will force quotacheck.
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 235 * sb_qflags
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 236 */
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 237
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 238 if (sb->sb_flags != mp->m_sb.sb_flags)
c517b3aa02cff1 Darrick J. Wong 2018-07-19 239 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 240
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 241 if (sb->sb_shared_vn != mp->m_sb.sb_shared_vn)
c517b3aa02cff1 Darrick J. Wong 2018-07-19 242 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 243
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 244 if (sb->sb_inoalignmt != cpu_to_be32(mp->m_sb.sb_inoalignmt))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 245 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 246
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 247 if (sb->sb_unit != cpu_to_be32(mp->m_sb.sb_unit))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 248 xchk_block_set_preen(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 249
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 250 if (sb->sb_width != cpu_to_be32(mp->m_sb.sb_width))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 251 xchk_block_set_preen(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 252
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 253 if (sb->sb_dirblklog != mp->m_sb.sb_dirblklog)
c517b3aa02cff1 Darrick J. Wong 2018-07-19 254 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 255
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 256 if (sb->sb_logsectlog != mp->m_sb.sb_logsectlog)
c517b3aa02cff1 Darrick J. Wong 2018-07-19 257 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 258
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 259 if (sb->sb_logsectsize != cpu_to_be16(mp->m_sb.sb_logsectsize))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 260 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 261
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 262 if (sb->sb_logsunit != cpu_to_be32(mp->m_sb.sb_logsunit))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 263 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 264
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 265 /* Do we see any invalid bits in sb_features2? */
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 266 if (!xfs_sb_version_hasmorebits(&mp->m_sb)) {
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 267 if (sb->sb_features2 != 0)
c517b3aa02cff1 Darrick J. Wong 2018-07-19 268 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 269 } else {
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 270 v2_ok = XFS_SB_VERSION2_OKBITS;
d6837c1aab42e7 Dave Chinner 2021-08-18 271 if (xfs_sb_is_v5(&mp->m_sb))
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 272 v2_ok |= XFS_SB_VERSION2_CRCBIT;
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 273
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 274 if (!!(sb->sb_features2 & cpu_to_be32(~v2_ok)))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 275 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 276
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 277 if (sb->sb_features2 != sb->sb_bad_features2)
c517b3aa02cff1 Darrick J. Wong 2018-07-19 278 xchk_block_set_preen(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 279 }
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 280
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 281 /* Check sb_features2 flags that are set at mkfs time. */
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 282 features_mask = cpu_to_be32(XFS_SB_VERSION2_LAZYSBCOUNTBIT |
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 283 XFS_SB_VERSION2_PROJID32BIT |
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 284 XFS_SB_VERSION2_CRCBIT |
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 285 XFS_SB_VERSION2_FTYPE);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 286 if ((sb->sb_features2 & features_mask) !=
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 287 (cpu_to_be32(mp->m_sb.sb_features2) & features_mask))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 288 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 289
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 290 /* Check sb_features2 flags that can be set after mkfs time. */
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 291 features_mask = cpu_to_be32(XFS_SB_VERSION2_ATTR2BIT);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 292 if ((sb->sb_features2 & features_mask) !=
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 293 (cpu_to_be32(mp->m_sb.sb_features2) & features_mask))
4a9bca86806fa6 Darrick J. Wong 2022-01-07 294 xchk_block_set_preen(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 295
38c26bfd90e199 Dave Chinner 2021-08-18 296 if (!xfs_has_crc(mp)) {
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 297 /* all v5 fields must be zero */
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 298 if (memchr_inv(&sb->sb_features_compat, 0,
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 299 sizeof(struct xfs_dsb) -
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 300 offsetof(struct xfs_dsb, sb_features_compat)))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 301 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 302 } else {
4a9bca86806fa6 Darrick J. Wong 2022-01-07 303 /* compat features must match */
4a9bca86806fa6 Darrick J. Wong 2022-01-07 304 if (sb->sb_features_compat !=
4a9bca86806fa6 Darrick J. Wong 2022-01-07 305 cpu_to_be32(mp->m_sb.sb_features_compat))
4a9bca86806fa6 Darrick J. Wong 2022-01-07 306 xchk_block_set_corrupt(sc, bp);
4a9bca86806fa6 Darrick J. Wong 2022-01-07 307
4a9bca86806fa6 Darrick J. Wong 2022-01-07 308 /* ro compat features must match */
4a9bca86806fa6 Darrick J. Wong 2022-01-07 309 if (sb->sb_features_ro_compat !=
4a9bca86806fa6 Darrick J. Wong 2022-01-07 310 cpu_to_be32(mp->m_sb.sb_features_ro_compat))
4a9bca86806fa6 Darrick J. Wong 2022-01-07 311 xchk_block_set_corrupt(sc, bp);
4a9bca86806fa6 Darrick J. Wong 2022-01-07 312
4a9bca86806fa6 Darrick J. Wong 2022-01-07 313 /*
4a9bca86806fa6 Darrick J. Wong 2022-01-07 314 * NEEDSREPAIR is ignored on a secondary super, so we should
4a9bca86806fa6 Darrick J. Wong 2022-01-07 315 * clear it when we find it, though it's not a corruption.
4a9bca86806fa6 Darrick J. Wong 2022-01-07 316 */
4a9bca86806fa6 Darrick J. Wong 2022-01-07 317 features_mask = cpu_to_be32(XFS_SB_FEAT_INCOMPAT_NEEDSREPAIR);
4a9bca86806fa6 Darrick J. Wong 2022-01-07 318 if ((cpu_to_be32(mp->m_sb.sb_features_incompat) ^
4a9bca86806fa6 Darrick J. Wong 2022-01-07 319 sb->sb_features_incompat) & features_mask)
4a9bca86806fa6 Darrick J. Wong 2022-01-07 320 xchk_block_set_preen(sc, bp);
4a9bca86806fa6 Darrick J. Wong 2022-01-07 321
4a9bca86806fa6 Darrick J. Wong 2022-01-07 322 /* all other incompat features must match */
4a9bca86806fa6 Darrick J. Wong 2022-01-07 323 if ((cpu_to_be32(mp->m_sb.sb_features_incompat) ^
4a9bca86806fa6 Darrick J. Wong 2022-01-07 324 sb->sb_features_incompat) & ~features_mask)
c517b3aa02cff1 Darrick J. Wong 2018-07-19 325 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 326
4a9bca86806fa6 Darrick J. Wong 2022-01-07 327 /*
4a9bca86806fa6 Darrick J. Wong 2022-01-07 328 * log incompat features protect newer log record types from
4a9bca86806fa6 Darrick J. Wong 2022-01-07 329 * older log recovery code. Log recovery doesn't check the
4a9bca86806fa6 Darrick J. Wong 2022-01-07 330 * secondary supers, so we can clear these if needed.
4a9bca86806fa6 Darrick J. Wong 2022-01-07 331 */
4a9bca86806fa6 Darrick J. Wong 2022-01-07 332 if (sb->sb_features_log_incompat)
4a9bca86806fa6 Darrick J. Wong 2022-01-07 333 xchk_block_set_preen(sc, bp);
4a9bca86806fa6 Darrick J. Wong 2022-01-07 334
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 335 /* Don't care about sb_crc */
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 336
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 337 if (sb->sb_spino_align != cpu_to_be32(mp->m_sb.sb_spino_align))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 338 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 339
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 340 if (sb->sb_pquotino != cpu_to_be64(mp->m_sb.sb_pquotino))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 341 xchk_block_set_preen(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 342
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 343 /* Don't care about sb_lsn */
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 344 }
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 345
38c26bfd90e199 Dave Chinner 2021-08-18 346 if (xfs_has_metauuid(mp)) {
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 347 /* The metadata UUID must be the same for all supers */
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 348 if (!uuid_equal(&sb->sb_meta_uuid, &mp->m_sb.sb_meta_uuid))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 349 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 350 }
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 351
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 352 /* Everything else must be zero. */
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 353 if (memchr_inv(sb + 1, 0,
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 354 BBTOB(bp->b_length) - sizeof(struct xfs_dsb)))
c517b3aa02cff1 Darrick J. Wong 2018-07-19 355 xchk_block_set_corrupt(sc, bp);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 356
c517b3aa02cff1 Darrick J. Wong 2018-07-19 357 xchk_superblock_xref(sc, bp);
48c6615cc55759 Darrick J. Wong 2021-08-06 358 out_pag:
48c6615cc55759 Darrick J. Wong 2021-08-06 359 xfs_perag_put(pag);
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 360 return error;
21fb4cb1981ef7 Darrick J. Wong 2017-10-17 361 }
ab9d5dc59fe615 Darrick J. Wong 2017-10-17 362
:::::: The code at line 175 was first introduced by commit
:::::: 21fb4cb1981ef7e02f35a42b2a5ae619517dfe1b xfs: scrub the secondary superblocks
:::::: TO: Darrick J. Wong <darrick.wong@oracle.com>
:::::: CC: Darrick J. Wong <darrick.wong@oracle.com>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
reply other threads:[~2023-06-06 8:38 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=202306061608.Yy2mDyj4-lkp@intel.com \
--to=lkp@intel.com \
--cc=bfoster@redhat.com \
--cc=llvm@lists.linux.dev \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=snitzer@kernel.org \
/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