Re: [PATCH 4/4] NFSD: handle GETATTR conflict with write delegation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Dai,

kernel test robot noticed the following build warnings:

[auto build test WARNING on linus/master]
[also build test WARNING on v6.4-rc1 next-20230512]
[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#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Dai-Ngo/locks-allow-support-for-write-delegation/20230512-054404
base:   linus/master
patch link:    https://lore.kernel.org/r/1683841383-21372-5-git-send-email-dai.ngo%40oracle.com
patch subject: [PATCH 4/4] NFSD: handle GETATTR conflict with write delegation
config: m68k-randconfig-s041-20230509 (https://download.01.org/0day-ci/archive/20230512/202305122100.rFiPDpBs-lkp@xxxxxxxxx/config)
compiler: m68k-linux-gcc (GCC) 12.1.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.4-39-gce1a6720-dirty
        # https://github.com/intel-lab-lkp/linux/commit/9e8fd28524572f2f87cc153cbaaaa7a4120d2319
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Dai-Ngo/locks-allow-support-for-write-delegation/20230512-054404
        git checkout 9e8fd28524572f2f87cc153cbaaaa7a4120d2319
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=m68k olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=m68k SHELL=/bin/bash fs/nfsd/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Link: https://lore.kernel.org/oe-kbuild-all/202305122100.rFiPDpBs-lkp@xxxxxxxxx/

sparse warnings: (new ones prefixed by >>)
>> fs/nfsd/nfs4xdr.c:2968:24: sparse: sparse: incorrect type in return expression (different base types) @@     expected int @@     got restricted __be32 [assigned] [usertype] status @@
   fs/nfsd/nfs4xdr.c:2968:24: sparse:     expected int
   fs/nfsd/nfs4xdr.c:2968:24: sparse:     got restricted __be32 [assigned] [usertype] status
>> fs/nfsd/nfs4xdr.c:3043:24: sparse: sparse: incorrect type in assignment (different base types) @@     expected restricted __be32 [assigned] [usertype] status @@     got int @@
   fs/nfsd/nfs4xdr.c:3043:24: sparse:     expected restricted __be32 [assigned] [usertype] status
   fs/nfsd/nfs4xdr.c:3043:24: sparse:     got int

vim +2968 fs/nfsd/nfs4xdr.c

  2942	
  2943	static int
  2944	nfs4_handle_wrdeleg_conflict(struct svc_rqst *rqstp, struct inode *inode,
  2945				bool *modified, u64 *size)
  2946	{
  2947		__be32 status;
  2948		struct file_lock *fl;
  2949		struct nfs4_delegation *dp;
  2950		struct nfs4_cb_fattr *ncf;
  2951		struct iattr attrs;
  2952	
  2953		*modified = false;
  2954		fl = nfs4_wrdeleg_filelock(rqstp, inode);
  2955		if (!fl)
  2956			return 0;
  2957		dp = fl->fl_owner;
  2958		ncf = &dp->dl_cb_fattr;
  2959		if (dp->dl_recall.cb_clp == *(rqstp->rq_lease_breaker))
  2960			return 0;
  2961	
  2962		refcount_inc(&dp->dl_stid.sc_count);
  2963		nfs4_cb_getattr(&dp->dl_cb_fattr);
  2964		wait_on_bit(&ncf->ncf_cb_flags, CB_GETATTR_BUSY, TASK_INTERRUPTIBLE);
  2965		if (ncf->ncf_cb_status) {
  2966			status = nfserrno(nfsd_open_break_lease(inode, NFSD_MAY_READ));
  2967			nfs4_put_stid(&dp->dl_stid);
> 2968			return status;
  2969		}
  2970		ncf->ncf_cur_fsize = ncf->ncf_cb_fsize;
  2971		if (!ncf->ncf_file_modified &&
  2972				(ncf->ncf_initial_cinfo != ncf->ncf_cb_cinfo ||
  2973				ncf->ncf_cur_fsize != ncf->ncf_cb_fsize)) {
  2974			ncf->ncf_file_modified = true;
  2975		}
  2976	
  2977		if (ncf->ncf_file_modified) {
  2978			/*
  2979			 * The server would not update the file's metadata
  2980			 * with the client's modified size.
  2981			 * nfsd4 change attribute is constructed from ctime.
  2982			 */
  2983			attrs.ia_mtime = attrs.ia_ctime = current_time(inode);
  2984			attrs.ia_valid = ATTR_MTIME | ATTR_CTIME;
  2985			setattr_copy(&nop_mnt_idmap, inode, &attrs);
  2986			mark_inode_dirty(inode);
  2987			*size = ncf->ncf_cur_fsize;
  2988			*modified = true;
  2989		}
  2990		nfs4_put_stid(&dp->dl_stid);
  2991		return 0;
  2992	}
  2993	
  2994	/*
  2995	 * Note: @fhp can be NULL; in this case, we might have to compose the filehandle
  2996	 * ourselves.
  2997	 */
  2998	static __be32
  2999	nfsd4_encode_fattr(struct xdr_stream *xdr, struct svc_fh *fhp,
  3000			struct svc_export *exp,
  3001			struct dentry *dentry, u32 *bmval,
  3002			struct svc_rqst *rqstp, int ignore_crossmnt)
  3003	{
  3004		u32 bmval0 = bmval[0];
  3005		u32 bmval1 = bmval[1];
  3006		u32 bmval2 = bmval[2];
  3007		struct kstat stat;
  3008		struct svc_fh *tempfh = NULL;
  3009		struct kstatfs statfs;
  3010		__be32 *p, *attrlen_p;
  3011		int starting_len = xdr->buf->len;
  3012		int attrlen_offset;
  3013		u32 dummy;
  3014		u64 dummy64;
  3015		u32 rdattr_err = 0;
  3016		__be32 status;
  3017		int err;
  3018		struct nfs4_acl *acl = NULL;
  3019	#ifdef CONFIG_NFSD_V4_SECURITY_LABEL
  3020		void *context = NULL;
  3021		int contextlen;
  3022	#endif
  3023		bool contextsupport = false;
  3024		struct nfsd4_compoundres *resp = rqstp->rq_resp;
  3025		u32 minorversion = resp->cstate.minorversion;
  3026		struct path path = {
  3027			.mnt	= exp->ex_path.mnt,
  3028			.dentry	= dentry,
  3029		};
  3030		struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id);
  3031		bool file_modified;
  3032		u64 size = 0;
  3033	
  3034		BUG_ON(bmval1 & NFSD_WRITEONLY_ATTRS_WORD1);
  3035		BUG_ON(!nfsd_attrs_supported(minorversion, bmval));
  3036	
  3037		if (exp->ex_fslocs.migrated) {
  3038			status = fattr_handle_absent_fs(&bmval0, &bmval1, &bmval2, &rdattr_err);
  3039			if (status)
  3040				goto out;
  3041		}
  3042		if (bmval0 & (FATTR4_WORD0_CHANGE | FATTR4_WORD0_SIZE)) {
> 3043			status = nfs4_handle_wrdeleg_conflict(rqstp, d_inode(dentry),
  3044							&file_modified, &size);
  3045			if (status)
  3046				goto out;
  3047		}
  3048	
  3049		err = vfs_getattr(&path, &stat,
  3050				  STATX_BASIC_STATS | STATX_BTIME | STATX_CHANGE_COOKIE,
  3051				  AT_STATX_SYNC_AS_STAT);
  3052		if (err)
  3053			goto out_nfserr;
  3054		if (!(stat.result_mask & STATX_BTIME))
  3055			/* underlying FS does not offer btime so we can't share it */
  3056			bmval1 &= ~FATTR4_WORD1_TIME_CREATE;
  3057		if ((bmval0 & (FATTR4_WORD0_FILES_AVAIL | FATTR4_WORD0_FILES_FREE |
  3058				FATTR4_WORD0_FILES_TOTAL | FATTR4_WORD0_MAXNAME)) ||
  3059		    (bmval1 & (FATTR4_WORD1_SPACE_AVAIL | FATTR4_WORD1_SPACE_FREE |
  3060			       FATTR4_WORD1_SPACE_TOTAL))) {
  3061			err = vfs_statfs(&path, &statfs);
  3062			if (err)
  3063				goto out_nfserr;
  3064		}
  3065		if ((bmval0 & (FATTR4_WORD0_FILEHANDLE | FATTR4_WORD0_FSID)) && !fhp) {
  3066			tempfh = kmalloc(sizeof(struct svc_fh), GFP_KERNEL);
  3067			status = nfserr_jukebox;
  3068			if (!tempfh)
  3069				goto out;
  3070			fh_init(tempfh, NFS4_FHSIZE);
  3071			status = fh_compose(tempfh, exp, dentry, NULL);
  3072			if (status)
  3073				goto out;
  3074			fhp = tempfh;
  3075		}
  3076		if (bmval0 & FATTR4_WORD0_ACL) {
  3077			err = nfsd4_get_nfs4_acl(rqstp, dentry, &acl);
  3078			if (err == -EOPNOTSUPP)
  3079				bmval0 &= ~FATTR4_WORD0_ACL;
  3080			else if (err == -EINVAL) {
  3081				status = nfserr_attrnotsupp;
  3082				goto out;
  3083			} else if (err != 0)
  3084				goto out_nfserr;
  3085		}
  3086	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests



[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [NTFS 3]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [NTFS 3]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux