Re: [PATCH 1/2 net-next] libceph: Use sruct_size() in ceph_create_snap_context()

From: Christophe JAILLET
Date: Sun May 19 2024 - 08:55:31 EST


Le 19/05/2024 à 13:34, kernel test robot a écrit :
Hi Christophe,

kernel test robot noticed the following build errors:

[auto build test ERROR on net-next/main]

url: https://github.com/intel-lab-lkp/linux/commits/Christophe-JAILLET/libceph-Use-__counted_by-in-struct-ceph_snap_context/20240519-172142
base: net-next/main
patch link: https://lore.kernel.org/r/5b7c72bdb52703bbfa5511ed500aed4babde1308.1716109606.git.christophe.jaillet%40wanadoo.fr
patch subject: [PATCH 1/2 net-next] libceph: Use sruct_size() in ceph_create_snap_context()
config: i386-allmodconfig (https://download.01.org/0day-ci/archive/20240519/202405191909.7qhhefnu-lkp@xxxxxxxxx/config)
compiler: gcc-13 (Ubuntu 13.2.0-4ubuntu3) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240519/202405191909.7qhhefnu-lkp@xxxxxxxxx/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@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202405191909.7qhhefnu-lkp@xxxxxxxxx/

All errors (new ones prefixed by >>):

net/ceph/snapshot.c: In function 'ceph_create_snap_context':
net/ceph/snapshot.c:32:25: error: implicit declaration of function 'sruct_size'; did you mean 'struct_size'? [-Werror=implicit-function-declaration]
32 | snapc = kzalloc(sruct_size(snapc, snaps, snap_count), gfp_flags);
| ^~~~~~~~~~
| struct_size
net/ceph/snapshot.c:32:43: error: 'snaps' undeclared (first use in this function); did you mean 'snapc'?
32 | snapc = kzalloc(sruct_size(snapc, snaps, snap_count), gfp_flags);
| ^~~~~
| snapc
net/ceph/snapshot.c:32:43: note: each undeclared identifier is reported only once for each function it appears in
cc1: some warnings being treated as errors


vim +32 net/ceph/snapshot.c

11
12 /*
13 * Ceph snapshot contexts are reference counted objects, and the
14 * returned structure holds a single reference. Acquire additional
15 * references with ceph_get_snap_context(), and release them with
16 * ceph_put_snap_context(). When the reference count reaches zero
17 * the entire structure is freed.
18 */
19
20 /*
21 * Create a new ceph snapshot context large enough to hold the
22 * indicated number of snapshot ids (which can be 0). Caller has
23 * to fill in snapc->seq and snapc->snaps[0..snap_count-1].
24 *
25 * Returns a null pointer if an error occurs.
26 */
27 struct ceph_snap_context *ceph_create_snap_context(u32 snap_count,
28 gfp_t gfp_flags)
29 {
30 struct ceph_snap_context *snapc;
31
> 32 snapc = kzalloc(sruct_size(snapc, snaps, snap_count), gfp_flags);

Ouch!

this was build-tested, but I must have made a mistake when editing the patch file to add the "net-next".

Sorry about that.
I'll resend when the net-next branch will re-open.

CJ

33 if (!snapc)
34 return NULL;
35
36 refcount_set(&snapc->nref, 1);
37 snapc->num_snaps = snap_count;
38
39 return snapc;
40 }
41 EXPORT_SYMBOL(ceph_create_snap_context);
42