public inbox for llvm@lists.linux.dev
 help / color / mirror / Atom feed
* Re: [PATCH 1/3] ceph: handle InodeStat v8 versioned field in reply parsing
       [not found] <20251127134620.2035796-2-amarkuze@redhat.com>
@ 2025-11-28  1:48 ` kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2025-11-28  1:48 UTC (permalink / raw)
  To: Alex Markuze, ceph-devel
  Cc: llvm, oe-kbuild-all, idryomov, linux-fsdevel, amarkuze, vdubeyko

Hi Alex,

kernel test robot noticed the following build warnings:

[auto build test WARNING on ceph-client/for-linus]
[also build test WARNING on linus/master v6.18-rc7 next-20251127]
[cannot apply to ceph-client/testing]
[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/Alex-Markuze/ceph-handle-InodeStat-v8-versioned-field-in-reply-parsing/20251127-214928
base:   https://github.com/ceph/ceph-client.git for-linus
patch link:    https://lore.kernel.org/r/20251127134620.2035796-2-amarkuze%40redhat.com
patch subject: [PATCH 1/3] ceph: handle InodeStat v8 versioned field in reply parsing
config: loongarch-defconfig (https://download.01.org/0day-ci/archive/20251128/202511280915.HZ1rLMsq-lkp@intel.com/config)
compiler: clang version 19.1.7 (https://github.com/llvm/llvm-project cd708029e0b2869e80abe31ddb175f7c35361f90)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251128/202511280915.HZ1rLMsq-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202511280915.HZ1rLMsq-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> fs/ceph/mds_client.c:237:7: warning: variable 'v8_struct_v' set but not used [-Wunused-but-set-variable]
     237 |                         u8 v8_struct_v, v8_struct_compat;
         |                            ^
>> fs/ceph/mds_client.c:237:20: warning: variable 'v8_struct_compat' set but not used [-Wunused-but-set-variable]
     237 |                         u8 v8_struct_v, v8_struct_compat;
         |                                         ^
   2 warnings generated.


vim +/v8_struct_v +237 fs/ceph/mds_client.c

    97	
    98	/*
    99	 * parse individual inode info
   100	 */
   101	static int parse_reply_info_in(void **p, void *end,
   102				       struct ceph_mds_reply_info_in *info,
   103				       u64 features)
   104	{
   105		int err = 0;
   106		u8 struct_v = 0;
   107	
   108		if (features == (u64)-1) {
   109			u32 struct_len;
   110			u8 struct_compat;
   111			ceph_decode_8_safe(p, end, struct_v, bad);
   112			ceph_decode_8_safe(p, end, struct_compat, bad);
   113			/* struct_v is expected to be >= 1. we only understand
   114			 * encoding with struct_compat == 1. */
   115			if (!struct_v || struct_compat != 1)
   116				goto bad;
   117			ceph_decode_32_safe(p, end, struct_len, bad);
   118			ceph_decode_need(p, end, struct_len, bad);
   119			end = *p + struct_len;
   120		}
   121	
   122		ceph_decode_need(p, end, sizeof(struct ceph_mds_reply_inode), bad);
   123		info->in = *p;
   124		*p += sizeof(struct ceph_mds_reply_inode) +
   125			sizeof(*info->in->fragtree.splits) *
   126			le32_to_cpu(info->in->fragtree.nsplits);
   127	
   128		ceph_decode_32_safe(p, end, info->symlink_len, bad);
   129		ceph_decode_need(p, end, info->symlink_len, bad);
   130		info->symlink = *p;
   131		*p += info->symlink_len;
   132	
   133		ceph_decode_copy_safe(p, end, &info->dir_layout,
   134				      sizeof(info->dir_layout), bad);
   135		ceph_decode_32_safe(p, end, info->xattr_len, bad);
   136		ceph_decode_need(p, end, info->xattr_len, bad);
   137		info->xattr_data = *p;
   138		*p += info->xattr_len;
   139	
   140		if (features == (u64)-1) {
   141			/* inline data */
   142			ceph_decode_64_safe(p, end, info->inline_version, bad);
   143			ceph_decode_32_safe(p, end, info->inline_len, bad);
   144			ceph_decode_need(p, end, info->inline_len, bad);
   145			info->inline_data = *p;
   146			*p += info->inline_len;
   147			/* quota */
   148			err = parse_reply_info_quota(p, end, info);
   149			if (err < 0)
   150				goto out_bad;
   151			/* pool namespace */
   152			ceph_decode_32_safe(p, end, info->pool_ns_len, bad);
   153			if (info->pool_ns_len > 0) {
   154				ceph_decode_need(p, end, info->pool_ns_len, bad);
   155				info->pool_ns_data = *p;
   156				*p += info->pool_ns_len;
   157			}
   158	
   159			/* btime */
   160			ceph_decode_need(p, end, sizeof(info->btime), bad);
   161			ceph_decode_copy(p, &info->btime, sizeof(info->btime));
   162	
   163			/* change attribute */
   164			ceph_decode_64_safe(p, end, info->change_attr, bad);
   165	
   166			/* dir pin */
   167			if (struct_v >= 2) {
   168				ceph_decode_32_safe(p, end, info->dir_pin, bad);
   169			} else {
   170				info->dir_pin = -ENODATA;
   171			}
   172	
   173			/* snapshot birth time, remains zero for v<=2 */
   174			if (struct_v >= 3) {
   175				ceph_decode_need(p, end, sizeof(info->snap_btime), bad);
   176				ceph_decode_copy(p, &info->snap_btime,
   177						 sizeof(info->snap_btime));
   178			} else {
   179				memset(&info->snap_btime, 0, sizeof(info->snap_btime));
   180			}
   181	
   182			/* snapshot count, remains zero for v<=3 */
   183			if (struct_v >= 4) {
   184				ceph_decode_64_safe(p, end, info->rsnaps, bad);
   185			} else {
   186				info->rsnaps = 0;
   187			}
   188	
   189			if (struct_v >= 5) {
   190				u32 alen;
   191	
   192				ceph_decode_32_safe(p, end, alen, bad);
   193	
   194				while (alen--) {
   195					u32 len;
   196	
   197					/* key */
   198					ceph_decode_32_safe(p, end, len, bad);
   199					ceph_decode_skip_n(p, end, len, bad);
   200					/* value */
   201					ceph_decode_32_safe(p, end, len, bad);
   202					ceph_decode_skip_n(p, end, len, bad);
   203				}
   204			}
   205	
   206			/* fscrypt flag -- ignore */
   207			if (struct_v >= 6)
   208				ceph_decode_skip_8(p, end, bad);
   209	
   210			info->fscrypt_auth = NULL;
   211			info->fscrypt_auth_len = 0;
   212			info->fscrypt_file = NULL;
   213			info->fscrypt_file_len = 0;
   214			if (struct_v >= 7) {
   215				ceph_decode_32_safe(p, end, info->fscrypt_auth_len, bad);
   216				if (info->fscrypt_auth_len) {
   217					info->fscrypt_auth = kmalloc(info->fscrypt_auth_len,
   218								     GFP_KERNEL);
   219					if (!info->fscrypt_auth)
   220						return -ENOMEM;
   221					ceph_decode_copy_safe(p, end, info->fscrypt_auth,
   222							      info->fscrypt_auth_len, bad);
   223				}
   224				ceph_decode_32_safe(p, end, info->fscrypt_file_len, bad);
   225				if (info->fscrypt_file_len) {
   226					info->fscrypt_file = kmalloc(info->fscrypt_file_len,
   227								     GFP_KERNEL);
   228					if (!info->fscrypt_file)
   229						return -ENOMEM;
   230					ceph_decode_copy_safe(p, end, info->fscrypt_file,
   231							      info->fscrypt_file_len, bad);
   232				}
   233			}
   234	
   235			/* struct_v 8 added a versioned field - skip it */
   236			if (struct_v >= 8) {
 > 237				u8 v8_struct_v, v8_struct_compat;
   238				u32 v8_struct_len;
   239	
   240				ceph_decode_8_safe(p, end, v8_struct_v, bad);
   241				ceph_decode_8_safe(p, end, v8_struct_compat, bad);
   242				ceph_decode_32_safe(p, end, v8_struct_len, bad);
   243				ceph_decode_skip_n(p, end, v8_struct_len, bad);
   244			}
   245	
   246			*p = end;
   247		} else {
   248			/* legacy (unversioned) struct */
   249			if (features & CEPH_FEATURE_MDS_INLINE_DATA) {
   250				ceph_decode_64_safe(p, end, info->inline_version, bad);
   251				ceph_decode_32_safe(p, end, info->inline_len, bad);
   252				ceph_decode_need(p, end, info->inline_len, bad);
   253				info->inline_data = *p;
   254				*p += info->inline_len;
   255			} else
   256				info->inline_version = CEPH_INLINE_NONE;
   257	
   258			if (features & CEPH_FEATURE_MDS_QUOTA) {
   259				err = parse_reply_info_quota(p, end, info);
   260				if (err < 0)
   261					goto out_bad;
   262			} else {
   263				info->max_bytes = 0;
   264				info->max_files = 0;
   265			}
   266	
   267			info->pool_ns_len = 0;
   268			info->pool_ns_data = NULL;
   269			if (features & CEPH_FEATURE_FS_FILE_LAYOUT_V2) {
   270				ceph_decode_32_safe(p, end, info->pool_ns_len, bad);
   271				if (info->pool_ns_len > 0) {
   272					ceph_decode_need(p, end, info->pool_ns_len, bad);
   273					info->pool_ns_data = *p;
   274					*p += info->pool_ns_len;
   275				}
   276			}
   277	
   278			if (features & CEPH_FEATURE_FS_BTIME) {
   279				ceph_decode_need(p, end, sizeof(info->btime), bad);
   280				ceph_decode_copy(p, &info->btime, sizeof(info->btime));
   281				ceph_decode_64_safe(p, end, info->change_attr, bad);
   282			}
   283	
   284			info->dir_pin = -ENODATA;
   285			/* info->snap_btime and info->rsnaps remain zero */
   286		}
   287		return 0;
   288	bad:
   289		err = -EIO;
   290	out_bad:
   291		return err;
   292	}
   293	

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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2025-11-28  1:49 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20251127134620.2035796-2-amarkuze@redhat.com>
2025-11-28  1:48 ` [PATCH 1/3] ceph: handle InodeStat v8 versioned field in reply parsing kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox