Message ID | 20210402142409.372050-7-hch@lst.de (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [1/7] xfs: move the XFS_IFEXTENTS check into xfs_iread_extents | expand |
Hi Christoph, I love your patch! Yet something to improve: [auto build test ERROR on xfs-linux/for-next] [also build test ERROR on v5.12-rc5 next-20210401] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Christoph-Hellwig/xfs-move-the-XFS_IFEXTENTS-check-into-xfs_iread_extents/20210402-232422 base: https://git.kernel.org/pub/scm/fs/xfs/xfs-linux.git for-next config: x86_64-randconfig-r034-20210401 (attached as .config) compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project b23a314146956dd29b719ab537608ced736fc036) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install x86_64 cross compiling tool for clang build # apt-get install binutils-x86-64-linux-gnu # https://github.com/0day-ci/linux/commit/3a376a77f4296e338a26df75eb05a1b7ae0def2a git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Christoph-Hellwig/xfs-move-the-XFS_IFEXTENTS-check-into-xfs_iread_extents/20210402-232422 git checkout 3a376a77f4296e338a26df75eb05a1b7ae0def2a # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All errors (new ones prefixed by >>): >> fs/xfs/xfs_iops.c:522:9: error: use of undeclared identifier 'dp' ASSERT(dp->i_df.if_format == XFS_DINODE_FMT_LOCAL); ^ 1 error generated. -- >> fs/xfs/xfs_symlink.c:107:9: error: use of undeclared identifier 'dp' ASSERT(dp->i_df.if_format != XFS_DINODE_FMT_LOCAL); ^ 1 error generated. vim +/dp +522 fs/xfs/xfs_iops.c 512 513 STATIC const char * 514 xfs_vn_get_link_inline( 515 struct dentry *dentry, 516 struct inode *inode, 517 struct delayed_call *done) 518 { 519 struct xfs_inode *ip = XFS_I(inode); 520 char *link; 521 > 522 ASSERT(dp->i_df.if_format == XFS_DINODE_FMT_LOCAL); 523 524 /* 525 * The VFS crashes on a NULL pointer, so return -EFSCORRUPTED if 526 * if_data is junk. 527 */ 528 link = ip->i_df.if_u1.if_data; 529 if (XFS_IS_CORRUPT(ip->i_mount, !link)) 530 return ERR_PTR(-EFSCORRUPTED); 531 return link; 532 } 533 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Hi Christoph, I love your patch! Yet something to improve: [auto build test ERROR on xfs-linux/for-next] [also build test ERROR on v5.12-rc5 next-20210401] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Christoph-Hellwig/xfs-move-the-XFS_IFEXTENTS-check-into-xfs_iread_extents/20210402-232422 base: https://git.kernel.org/pub/scm/fs/xfs/xfs-linux.git for-next config: microblaze-randconfig-r036-20210401 (attached as .config) compiler: microblaze-linux-gcc (GCC) 9.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/0day-ci/linux/commit/3a376a77f4296e338a26df75eb05a1b7ae0def2a git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Christoph-Hellwig/xfs-move-the-XFS_IFEXTENTS-check-into-xfs_iread_extents/20210402-232422 git checkout 3a376a77f4296e338a26df75eb05a1b7ae0def2a # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=microblaze If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All errors (new ones prefixed by >>): In file included from include/linux/string.h:6, from include/linux/uuid.h:12, from fs/xfs/xfs_linux.h:10, from fs/xfs/xfs.h:22, from fs/xfs/xfs_iops.c:6: fs/xfs/xfs_iops.c: In function 'xfs_vn_get_link_inline': >> fs/xfs/xfs_iops.c:522:9: error: 'dp' undeclared (first use in this function); did you mean 'ip'? 522 | ASSERT(dp->i_df.if_format == XFS_DINODE_FMT_LOCAL); | ^~ include/linux/compiler.h:77:40: note: in definition of macro 'likely' 77 | # define likely(x) __builtin_expect(!!(x), 1) | ^ fs/xfs/xfs_iops.c:522:2: note: in expansion of macro 'ASSERT' 522 | ASSERT(dp->i_df.if_format == XFS_DINODE_FMT_LOCAL); | ^~~~~~ fs/xfs/xfs_iops.c:522:9: note: each undeclared identifier is reported only once for each function it appears in 522 | ASSERT(dp->i_df.if_format == XFS_DINODE_FMT_LOCAL); | ^~ include/linux/compiler.h:77:40: note: in definition of macro 'likely' 77 | # define likely(x) __builtin_expect(!!(x), 1) | ^ fs/xfs/xfs_iops.c:522:2: note: in expansion of macro 'ASSERT' 522 | ASSERT(dp->i_df.if_format == XFS_DINODE_FMT_LOCAL); | ^~~~~~ -- In file included from include/linux/string.h:6, from include/linux/uuid.h:12, from fs/xfs/xfs_linux.h:10, from fs/xfs/xfs.h:22, from fs/xfs/xfs_symlink.c:7: fs/xfs/xfs_symlink.c: In function 'xfs_readlink': >> fs/xfs/xfs_symlink.c:107:9: error: 'dp' undeclared (first use in this function); did you mean 'mp'? 107 | ASSERT(dp->i_df.if_format != XFS_DINODE_FMT_LOCAL); | ^~ include/linux/compiler.h:77:40: note: in definition of macro 'likely' 77 | # define likely(x) __builtin_expect(!!(x), 1) | ^ fs/xfs/xfs_symlink.c:107:2: note: in expansion of macro 'ASSERT' 107 | ASSERT(dp->i_df.if_format != XFS_DINODE_FMT_LOCAL); | ^~~~~~ fs/xfs/xfs_symlink.c:107:9: note: each undeclared identifier is reported only once for each function it appears in 107 | ASSERT(dp->i_df.if_format != XFS_DINODE_FMT_LOCAL); | ^~ include/linux/compiler.h:77:40: note: in definition of macro 'likely' 77 | # define likely(x) __builtin_expect(!!(x), 1) | ^ fs/xfs/xfs_symlink.c:107:2: note: in expansion of macro 'ASSERT' 107 | ASSERT(dp->i_df.if_format != XFS_DINODE_FMT_LOCAL); | ^~~~~~ vim +522 fs/xfs/xfs_iops.c 512 513 STATIC const char * 514 xfs_vn_get_link_inline( 515 struct dentry *dentry, 516 struct inode *inode, 517 struct delayed_call *done) 518 { 519 struct xfs_inode *ip = XFS_I(inode); 520 char *link; 521 > 522 ASSERT(dp->i_df.if_format == XFS_DINODE_FMT_LOCAL); 523 524 /* 525 * The VFS crashes on a NULL pointer, so return -EFSCORRUPTED if 526 * if_data is junk. 527 */ 528 link = ip->i_df.if_u1.if_data; 529 if (XFS_IS_CORRUPT(ip->i_mount, !link)) 530 return ERR_PTR(-EFSCORRUPTED); 531 return link; 532 } 533 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c index 6d1854d506d5ad..1f150f24230c9a 100644 --- a/fs/xfs/libxfs/xfs_attr.c +++ b/fs/xfs/libxfs/xfs_attr.c @@ -362,10 +362,8 @@ xfs_has_attr( if (!xfs_inode_hasattr(dp)) return -ENOATTR; - if (dp->i_afp->if_format == XFS_DINODE_FMT_LOCAL) { - ASSERT(dp->i_afp->if_flags & XFS_IFINLINE); + if (dp->i_afp->if_format == XFS_DINODE_FMT_LOCAL) return xfs_attr_sf_findname(args, NULL, NULL); - } if (xfs_attr_is_leaf(dp)) { error = xfs_attr_leaf_hasname(args, &bp); @@ -389,10 +387,8 @@ xfs_attr_remove_args( if (!xfs_inode_hasattr(args->dp)) return -ENOATTR; - if (args->dp->i_afp->if_format == XFS_DINODE_FMT_LOCAL) { - ASSERT(args->dp->i_afp->if_flags & XFS_IFINLINE); + if (args->dp->i_afp->if_format == XFS_DINODE_FMT_LOCAL) return xfs_attr_shortform_remove(args); - } if (xfs_attr_is_leaf(args->dp)) return xfs_attr_leaf_removename(args); return xfs_attr_node_removename(args); diff --git a/fs/xfs/libxfs/xfs_attr_leaf.c b/fs/xfs/libxfs/xfs_attr_leaf.c index d6ef69ab1c67a5..2de6ff2425a449 100644 --- a/fs/xfs/libxfs/xfs_attr_leaf.c +++ b/fs/xfs/libxfs/xfs_attr_leaf.c @@ -654,9 +654,6 @@ xfs_attr_shortform_create( if (ifp->if_format == XFS_DINODE_FMT_EXTENTS) { ifp->if_flags &= ~XFS_IFEXTENTS; /* just in case */ ifp->if_format = XFS_DINODE_FMT_LOCAL; - ifp->if_flags |= XFS_IFINLINE; - } else { - ASSERT(ifp->if_flags & XFS_IFINLINE); } xfs_idata_realloc(dp, sizeof(*hdr), XFS_ATTR_FORK); hdr = (struct xfs_attr_sf_hdr *)ifp->if_u1.if_data; @@ -733,7 +730,7 @@ xfs_attr_shortform_add( dp->i_d.di_forkoff = forkoff; ifp = dp->i_afp; - ASSERT(ifp->if_flags & XFS_IFINLINE); + ASSERT(ifp->if_format == XFS_DINODE_FMT_LOCAL); sf = (struct xfs_attr_shortform *)ifp->if_u1.if_data; if (xfs_attr_sf_findname(args, &sfe, NULL) == -EEXIST) ASSERT(0); @@ -851,7 +848,7 @@ xfs_attr_shortform_lookup(xfs_da_args_t *args) trace_xfs_attr_sf_lookup(args); ifp = args->dp->i_afp; - ASSERT(ifp->if_flags & XFS_IFINLINE); + ASSERT(ifp->if_format == XFS_DINODE_FMT_LOCAL); sf = (struct xfs_attr_shortform *)ifp->if_u1.if_data; sfe = &sf->list[0]; for (i = 0; i < sf->hdr.count; @@ -878,7 +875,7 @@ xfs_attr_shortform_getvalue( struct xfs_attr_sf_entry *sfe; int i; - ASSERT(args->dp->i_afp->if_flags == XFS_IFINLINE); + ASSERT(args->dp->i_afp->if_format == XFS_DINODE_FMT_LOCAL); sf = (struct xfs_attr_shortform *)args->dp->i_afp->if_u1.if_data; sfe = &sf->list[0]; for (i = 0; i < sf->hdr.count; diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c index 8c93ee1b751286..854f313749b638 100644 --- a/fs/xfs/libxfs/xfs_bmap.c +++ b/fs/xfs/libxfs/xfs_bmap.c @@ -803,7 +803,6 @@ xfs_bmap_local_to_extents_empty( ASSERT(ifp->if_nextents == 0); xfs_bmap_forkoff_reset(ip, whichfork); - ifp->if_flags &= ~XFS_IFINLINE; ifp->if_flags |= XFS_IFEXTENTS; ifp->if_u1.if_root = NULL; ifp->if_height = 0; @@ -848,7 +847,7 @@ xfs_bmap_local_to_extents( flags = 0; error = 0; - ASSERT((ifp->if_flags & (XFS_IFINLINE|XFS_IFEXTENTS)) == XFS_IFINLINE); + ASSERT(!(ifp->if_flags & XFS_IFEXTENTS)); memset(&args, 0, sizeof(args)); args.tp = tp; args.mp = ip->i_mount; diff --git a/fs/xfs/libxfs/xfs_dir2_block.c b/fs/xfs/libxfs/xfs_dir2_block.c index 5b59d3f7746b34..7e1df0c13fa74b 100644 --- a/fs/xfs/libxfs/xfs_dir2_block.c +++ b/fs/xfs/libxfs/xfs_dir2_block.c @@ -1096,7 +1096,7 @@ xfs_dir2_sf_to_block( trace_xfs_dir2_sf_to_block(args); - ASSERT(ifp->if_flags & XFS_IFINLINE); + ASSERT(ifp->if_format == XFS_DINODE_FMT_LOCAL); ASSERT(dp->i_d.di_size >= offsetof(struct xfs_dir2_sf_hdr, parent)); oldsfp = (xfs_dir2_sf_hdr_t *)ifp->if_u1.if_data; diff --git a/fs/xfs/libxfs/xfs_dir2_sf.c b/fs/xfs/libxfs/xfs_dir2_sf.c index 8c4f76bba88be1..e8a53a68625eaf 100644 --- a/fs/xfs/libxfs/xfs_dir2_sf.c +++ b/fs/xfs/libxfs/xfs_dir2_sf.c @@ -378,7 +378,7 @@ xfs_dir2_sf_addname( ASSERT(xfs_dir2_sf_lookup(args) == -ENOENT); dp = args->dp; - ASSERT(dp->i_df.if_flags & XFS_IFINLINE); + ASSERT(dp->i_df.if_format == XFS_DINODE_FMT_LOCAL); ASSERT(dp->i_d.di_size >= offsetof(struct xfs_dir2_sf_hdr, parent)); ASSERT(dp->i_df.if_bytes == dp->i_d.di_size); ASSERT(dp->i_df.if_u1.if_data != NULL); @@ -830,9 +830,8 @@ xfs_dir2_sf_create( dp->i_df.if_flags &= ~XFS_IFEXTENTS; /* just in case */ dp->i_df.if_format = XFS_DINODE_FMT_LOCAL; xfs_trans_log_inode(args->trans, dp, XFS_ILOG_CORE); - dp->i_df.if_flags |= XFS_IFINLINE; } - ASSERT(dp->i_df.if_flags & XFS_IFINLINE); + ASSERT(dp->i_df.if_format == XFS_DINODE_FMT_LOCAL); ASSERT(dp->i_df.if_bytes == 0); i8count = pino > XFS_DIR2_MAX_SHORT_INUM; size = xfs_dir2_sf_hdr_size(i8count); @@ -877,7 +876,7 @@ xfs_dir2_sf_lookup( xfs_dir2_sf_check(args); - ASSERT(dp->i_df.if_flags & XFS_IFINLINE); + ASSERT(dp->i_df.if_format == XFS_DINODE_FMT_LOCAL); ASSERT(dp->i_d.di_size >= offsetof(struct xfs_dir2_sf_hdr, parent)); ASSERT(dp->i_df.if_bytes == dp->i_d.di_size); ASSERT(dp->i_df.if_u1.if_data != NULL); @@ -954,7 +953,7 @@ xfs_dir2_sf_removename( trace_xfs_dir2_sf_removename(args); - ASSERT(dp->i_df.if_flags & XFS_IFINLINE); + ASSERT(dp->i_df.if_format == XFS_DINODE_FMT_LOCAL); oldsize = (int)dp->i_d.di_size; ASSERT(oldsize >= offsetof(struct xfs_dir2_sf_hdr, parent)); ASSERT(dp->i_df.if_bytes == oldsize); @@ -1053,7 +1052,7 @@ xfs_dir2_sf_replace( trace_xfs_dir2_sf_replace(args); - ASSERT(dp->i_df.if_flags & XFS_IFINLINE); + ASSERT(dp->i_df.if_format == XFS_DINODE_FMT_LOCAL); ASSERT(dp->i_d.di_size >= offsetof(struct xfs_dir2_sf_hdr, parent)); ASSERT(dp->i_df.if_bytes == dp->i_d.di_size); ASSERT(dp->i_df.if_u1.if_data != NULL); diff --git a/fs/xfs/libxfs/xfs_inode_fork.c b/fs/xfs/libxfs/xfs_inode_fork.c index 4389a00d103359..5d7d3bddd9a083 100644 --- a/fs/xfs/libxfs/xfs_inode_fork.c +++ b/fs/xfs/libxfs/xfs_inode_fork.c @@ -61,7 +61,6 @@ xfs_init_local_fork( ifp->if_bytes = size; ifp->if_flags &= ~XFS_IFEXTENTS; - ifp->if_flags |= XFS_IFINLINE; } /* diff --git a/fs/xfs/libxfs/xfs_inode_fork.h b/fs/xfs/libxfs/xfs_inode_fork.h index 745eae58325791..5f10377cdd6c36 100644 --- a/fs/xfs/libxfs/xfs_inode_fork.h +++ b/fs/xfs/libxfs/xfs_inode_fork.h @@ -30,7 +30,6 @@ struct xfs_ifork { /* * Per-fork incore inode flags. */ -#define XFS_IFINLINE 0x01 /* Inline data is read in */ #define XFS_IFEXTENTS 0x02 /* All extent pointers are read in */ /* diff --git a/fs/xfs/scrub/symlink.c b/fs/xfs/scrub/symlink.c index c08be5ede0661a..436e2a3a27ef3d 100644 --- a/fs/xfs/scrub/symlink.c +++ b/fs/xfs/scrub/symlink.c @@ -52,7 +52,7 @@ xchk_symlink( } /* Inline symlink? */ - if (ifp->if_flags & XFS_IFINLINE) { + if (ifp->if_format == XFS_DINODE_FMT_LOCAL) { if (len > XFS_IFORK_DSIZE(ip) || len > strnlen(ifp->if_u1.if_data, XFS_IFORK_DSIZE(ip))) xchk_fblock_set_corrupt(sc, XFS_DATA_FORK, 0); diff --git a/fs/xfs/xfs_dir2_readdir.c b/fs/xfs/xfs_dir2_readdir.c index 477df4869d19bd..1756ed55ff0595 100644 --- a/fs/xfs/xfs_dir2_readdir.c +++ b/fs/xfs/xfs_dir2_readdir.c @@ -57,7 +57,7 @@ xfs_dir2_sf_getdents( xfs_ino_t ino; struct xfs_da_geometry *geo = args->geo; - ASSERT(dp->i_df.if_flags & XFS_IFINLINE); + ASSERT(dp->i_df.if_format == XFS_DINODE_FMT_LOCAL); ASSERT(dp->i_df.if_bytes == dp->i_d.di_size); ASSERT(dp->i_df.if_u1.if_data != NULL); diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index 5b8ac9b6cef8e7..934e205935c116 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -519,7 +519,7 @@ xfs_vn_get_link_inline( struct xfs_inode *ip = XFS_I(inode); char *link; - ASSERT(ip->i_df.if_flags & XFS_IFINLINE); + ASSERT(dp->i_df.if_format == XFS_DINODE_FMT_LOCAL); /* * The VFS crashes on a NULL pointer, so return -EFSCORRUPTED if @@ -1402,7 +1402,7 @@ xfs_setup_iops( inode->i_fop = &xfs_dir_file_operations; break; case S_IFLNK: - if (ip->i_df.if_flags & XFS_IFINLINE) + if (ip->i_df.if_format == XFS_DINODE_FMT_LOCAL) inode->i_op = &xfs_inline_symlink_inode_operations; else inode->i_op = &xfs_symlink_inode_operations; diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c index db9c400f92584b..7b443dab47727c 100644 --- a/fs/xfs/xfs_symlink.c +++ b/fs/xfs/xfs_symlink.c @@ -104,7 +104,7 @@ xfs_readlink( trace_xfs_readlink(ip); - ASSERT(!(ip->i_df.if_flags & XFS_IFINLINE)); + ASSERT(dp->i_df.if_format != XFS_DINODE_FMT_LOCAL); if (XFS_FORCED_SHUTDOWN(mp)) return -EIO; @@ -492,7 +492,7 @@ xfs_inactive_symlink( * Inline fork state gets removed by xfs_difree() so we have nothing to * do here in that case. */ - if (ip->i_df.if_flags & XFS_IFINLINE) { + if (ip->i_df.if_format == XFS_DINODE_FMT_LOCAL) { xfs_iunlock(ip, XFS_ILOCK_EXCL); return 0; }
Just check for an inline format fork instead of the using the equivalent in-memory XFS_IFINLINE flag. Signed-off-by: Christoph Hellwig <hch@lst.de> --- fs/xfs/libxfs/xfs_attr.c | 8 ++------ fs/xfs/libxfs/xfs_attr_leaf.c | 9 +++------ fs/xfs/libxfs/xfs_bmap.c | 3 +-- fs/xfs/libxfs/xfs_dir2_block.c | 2 +- fs/xfs/libxfs/xfs_dir2_sf.c | 11 +++++------ fs/xfs/libxfs/xfs_inode_fork.c | 1 - fs/xfs/libxfs/xfs_inode_fork.h | 1 - fs/xfs/scrub/symlink.c | 2 +- fs/xfs/xfs_dir2_readdir.c | 2 +- fs/xfs/xfs_iops.c | 4 ++-- fs/xfs/xfs_symlink.c | 4 ++-- 11 files changed, 18 insertions(+), 29 deletions(-)