Hi luoqing, kernel test robot noticed the following build errors:
[auto build test ERROR on axboe/for-next] [also build test ERROR on device-mapper-dm/for-next linus/master v7.0-rc2 next-20260306] [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/luoqing/dm-bufio-Use-struct_size-helper-in-kmalloc/20260306-165625 base: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux.git for-next patch link: https://lore.kernel.org/r/20260306080257.1268206-1-l1138897701%40163.com patch subject: [PATCH 2/2] dm-bufio: Use struct_size() helper in kmalloc() config: x86_64-kexec (https://download.01.org/0day-ci/archive/20260306/[email protected]/config) compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260306/[email protected]/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 <[email protected]> | Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/ All errors (new ones prefixed by >>): >> drivers/md/dm-bufio.c:2514:29: error: no member named 'buffer_tree' in >> 'struct dm_bufio_client' 2514 | c = kzalloc(struct_size(c, buffer_tree, num_locks), GFP_KERNEL); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/overflow.h:436:37: note: expanded from macro 'struct_size' 436 | sizeof(*(p)) + flex_array_size(p, member, count), \ | ^ include/linux/overflow.h:420:26: note: expanded from macro 'flex_array_size' 420 | (count) * sizeof(*(p)->member) + __must_be_array((p)->member), \ | ^ include/linux/slab.h:1190:52: note: expanded from macro 'kzalloc' 1190 | #define kzalloc(...) alloc_hooks(kzalloc_noprof(__VA_ARGS__)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ include/linux/alloc_tag.h:265:31: note: expanded from macro 'alloc_hooks' 265 | alloc_hooks_tag(&_alloc_tag, _do_alloc); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ include/linux/alloc_tag.h:251:9: note: expanded from macro 'alloc_hooks_tag' 251 | typeof(_do_alloc) _res; \ | ^~~~~~~~~ >> drivers/md/dm-bufio.c:2514:29: error: no member named 'buffer_tree' in >> 'struct dm_bufio_client' 2514 | c = kzalloc(struct_size(c, buffer_tree, num_locks), GFP_KERNEL); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/overflow.h:436:37: note: expanded from macro 'struct_size' 436 | sizeof(*(p)) + flex_array_size(p, member, count), \ | ^ include/linux/overflow.h:420:57: note: expanded from macro 'flex_array_size' 420 | (count) * sizeof(*(p)->member) + __must_be_array((p)->member), \ | ^ include/linux/compiler.h:208:64: note: expanded from macro '__must_be_array' 208 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^ note: (skipping 3 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/slab.h:1190:52: note: expanded from macro 'kzalloc' 1190 | #define kzalloc(...) alloc_hooks(kzalloc_noprof(__VA_ARGS__)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ include/linux/alloc_tag.h:265:31: note: expanded from macro 'alloc_hooks' 265 | alloc_hooks_tag(&_alloc_tag, _do_alloc); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ include/linux/alloc_tag.h:251:9: note: expanded from macro 'alloc_hooks_tag' 251 | typeof(_do_alloc) _res; \ | ^~~~~~~~~ >> drivers/md/dm-bufio.c:2514:29: error: no member named 'buffer_tree' in >> 'struct dm_bufio_client' 2514 | c = kzalloc(struct_size(c, buffer_tree, num_locks), GFP_KERNEL); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/overflow.h:436:37: note: expanded from macro 'struct_size' 436 | sizeof(*(p)) + flex_array_size(p, member, count), \ | ^ include/linux/overflow.h:421:32: note: expanded from macro 'flex_array_size' 421 | size_mul(count, sizeof(*(p)->member) + __must_be_array((p)->member))) | ^ include/linux/slab.h:1190:52: note: expanded from macro 'kzalloc' 1190 | #define kzalloc(...) alloc_hooks(kzalloc_noprof(__VA_ARGS__)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ include/linux/alloc_tag.h:265:31: note: expanded from macro 'alloc_hooks' 265 | alloc_hooks_tag(&_alloc_tag, _do_alloc); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ include/linux/alloc_tag.h:251:9: note: expanded from macro 'alloc_hooks_tag' 251 | typeof(_do_alloc) _res; \ | ^~~~~~~~~ >> drivers/md/dm-bufio.c:2514:29: error: no member named 'buffer_tree' in >> 'struct dm_bufio_client' 2514 | c = kzalloc(struct_size(c, buffer_tree, num_locks), GFP_KERNEL); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/overflow.h:436:37: note: expanded from macro 'struct_size' 436 | sizeof(*(p)) + flex_array_size(p, member, count), \ | ^ include/linux/overflow.h:421:63: note: expanded from macro 'flex_array_size' 421 | size_mul(count, sizeof(*(p)->member) + __must_be_array((p)->member))) | ^ include/linux/compiler.h:208:64: note: expanded from macro '__must_be_array' 208 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^ note: (skipping 3 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/slab.h:1190:52: note: expanded from macro 'kzalloc' 1190 | #define kzalloc(...) alloc_hooks(kzalloc_noprof(__VA_ARGS__)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ include/linux/alloc_tag.h:265:31: note: expanded from macro 'alloc_hooks' 265 | alloc_hooks_tag(&_alloc_tag, _do_alloc); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ include/linux/alloc_tag.h:251:9: note: expanded from macro 'alloc_hooks_tag' 251 | typeof(_do_alloc) _res; \ | ^~~~~~~~~ >> drivers/md/dm-bufio.c:2514:29: error: no member named 'buffer_tree' in >> 'struct dm_bufio_client' 2514 | c = kzalloc(struct_size(c, buffer_tree, num_locks), GFP_KERNEL); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/overflow.h:437:45: note: expanded from macro 'struct_size' 437 | size_add(sizeof(*(p)), flex_array_size(p, member, count))) | ^ include/linux/overflow.h:420:26: note: expanded from macro 'flex_array_size' 420 | (count) * sizeof(*(p)->member) + __must_be_array((p)->member), \ | ^ include/linux/slab.h:1190:52: note: expanded from macro 'kzalloc' 1190 | #define kzalloc(...) alloc_hooks(kzalloc_noprof(__VA_ARGS__)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ include/linux/alloc_tag.h:265:31: note: expanded from macro 'alloc_hooks' 265 | alloc_hooks_tag(&_alloc_tag, _do_alloc); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ include/linux/alloc_tag.h:251:9: note: expanded from macro 'alloc_hooks_tag' 251 | typeof(_do_alloc) _res; \ | ^~~~~~~~~ >> drivers/md/dm-bufio.c:2514:29: error: no member named 'buffer_tree' in >> 'struct dm_bufio_client' 2514 | c = kzalloc(struct_size(c, buffer_tree, num_locks), GFP_KERNEL); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/overflow.h:437:45: note: expanded from macro 'struct_size' 437 | size_add(sizeof(*(p)), flex_array_size(p, member, count))) | ^ include/linux/overflow.h:420:57: note: expanded from macro 'flex_array_size' 420 | (count) * sizeof(*(p)->member) + __must_be_array((p)->member), \ | ^ include/linux/compiler.h:208:64: note: expanded from macro '__must_be_array' 208 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^ note: (skipping 3 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/slab.h:1190:52: note: expanded from macro 'kzalloc' 1190 | #define kzalloc(...) alloc_hooks(kzalloc_noprof(__VA_ARGS__)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ include/linux/alloc_tag.h:265:31: note: expanded from macro 'alloc_hooks' 265 | alloc_hooks_tag(&_alloc_tag, _do_alloc); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ include/linux/alloc_tag.h:251:9: note: expanded from macro 'alloc_hooks_tag' 251 | typeof(_do_alloc) _res; \ | ^~~~~~~~~ >> drivers/md/dm-bufio.c:2514:29: error: no member named 'buffer_tree' in >> 'struct dm_bufio_client' 2514 | c = kzalloc(struct_size(c, buffer_tree, num_locks), GFP_KERNEL); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/overflow.h:437:45: note: expanded from macro 'struct_size' 437 | size_add(sizeof(*(p)), flex_array_size(p, member, count))) | ^ include/linux/overflow.h:421:32: note: expanded from macro 'flex_array_size' 421 | size_mul(count, sizeof(*(p)->member) + __must_be_array((p)->member))) | ^ include/linux/slab.h:1190:52: note: expanded from macro 'kzalloc' 1190 | #define kzalloc(...) alloc_hooks(kzalloc_noprof(__VA_ARGS__)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ include/linux/alloc_tag.h:265:31: note: expanded from macro 'alloc_hooks' 265 | alloc_hooks_tag(&_alloc_tag, _do_alloc); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ include/linux/alloc_tag.h:251:9: note: expanded from macro 'alloc_hooks_tag' 251 | typeof(_do_alloc) _res; \ | ^~~~~~~~~ >> drivers/md/dm-bufio.c:2514:29: error: no member named 'buffer_tree' in >> 'struct dm_bufio_client' 2514 | c = kzalloc(struct_size(c, buffer_tree, num_locks), GFP_KERNEL); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/overflow.h:437:45: note: expanded from macro 'struct_size' 437 | size_add(sizeof(*(p)), flex_array_size(p, member, count))) | ^ include/linux/overflow.h:421:63: note: expanded from macro 'flex_array_size' 421 | size_mul(count, sizeof(*(p)->member) + __must_be_array((p)->member))) | ^ include/linux/compiler.h:208:64: note: expanded from macro '__must_be_array' 208 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^ note: (skipping 3 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/slab.h:1190:52: note: expanded from macro 'kzalloc' 1190 | #define kzalloc(...) alloc_hooks(kzalloc_noprof(__VA_ARGS__)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ include/linux/alloc_tag.h:265:31: note: expanded from macro 'alloc_hooks' 265 | alloc_hooks_tag(&_alloc_tag, _do_alloc); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ include/linux/alloc_tag.h:251:9: note: expanded from macro 'alloc_hooks_tag' 251 | typeof(_do_alloc) _res; \ | ^~~~~~~~~ >> drivers/md/dm-bufio.c:2514:29: error: no member named 'buffer_tree' in >> 'struct dm_bufio_client' 2514 | c = kzalloc(struct_size(c, buffer_tree, num_locks), GFP_KERNEL); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/overflow.h:436:37: note: expanded from macro 'struct_size' 436 | sizeof(*(p)) + flex_array_size(p, member, count), \ | ^ include/linux/overflow.h:420:26: note: expanded from macro 'flex_array_size' 420 | (count) * sizeof(*(p)->member) + __must_be_array((p)->member), \ | ^ include/linux/slab.h:1190:52: note: expanded from macro 'kzalloc' 1190 | #define kzalloc(...) alloc_hooks(kzalloc_noprof(__VA_ARGS__)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ include/linux/alloc_tag.h:265:31: note: expanded from macro 'alloc_hooks' 265 | alloc_hooks_tag(&_alloc_tag, _do_alloc); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ include/linux/alloc_tag.h:255:10: note: expanded from macro 'alloc_hooks_tag' 255 | _res = _do_alloc; \ | ^~~~~~~~~ >> drivers/md/dm-bufio.c:2514:29: error: no member named 'buffer_tree' in >> 'struct dm_bufio_client' 2514 | c = kzalloc(struct_size(c, buffer_tree, num_locks), GFP_KERNEL); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/overflow.h:436:37: note: expanded from macro 'struct_size' 436 | sizeof(*(p)) + flex_array_size(p, member, count), \ | ^ include/linux/overflow.h:420:57: note: expanded from macro 'flex_array_size' 420 | (count) * sizeof(*(p)->member) + __must_be_array((p)->member), \ | ^ include/linux/compiler.h:208:64: note: expanded from macro '__must_be_array' 208 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^ note: (skipping 3 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/slab.h:1190:52: note: expanded from macro 'kzalloc' 1190 | #define kzalloc(...) alloc_hooks(kzalloc_noprof(__VA_ARGS__)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ include/linux/alloc_tag.h:265:31: note: expanded from macro 'alloc_hooks' 265 | alloc_hooks_tag(&_alloc_tag, _do_alloc); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ include/linux/alloc_tag.h:255:10: note: expanded from macro 'alloc_hooks_tag' 255 | _res = _do_alloc; \ | ^~~~~~~~~ >> drivers/md/dm-bufio.c:2514:29: error: no member named 'buffer_tree' in >> 'struct dm_bufio_client' 2514 | c = kzalloc(struct_size(c, buffer_tree, num_locks), GFP_KERNEL); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/overflow.h:436:37: note: expanded from macro 'struct_size' 436 | sizeof(*(p)) + flex_array_size(p, member, count), \ | ^ include/linux/overflow.h:421:32: note: expanded from macro 'flex_array_size' 421 | size_mul(count, sizeof(*(p)->member) + __must_be_array((p)->member))) | ^ include/linux/slab.h:1190:52: note: expanded from macro 'kzalloc' 1190 | #define kzalloc(...) alloc_hooks(kzalloc_noprof(__VA_ARGS__)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ include/linux/alloc_tag.h:265:31: note: expanded from macro 'alloc_hooks' 265 | alloc_hooks_tag(&_alloc_tag, _do_alloc); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ include/linux/alloc_tag.h:255:10: note: expanded from macro 'alloc_hooks_tag' 255 | _res = _do_alloc; \ | ^~~~~~~~~ >> drivers/md/dm-bufio.c:2514:29: error: no member named 'buffer_tree' in >> 'struct dm_bufio_client' 2514 | c = kzalloc(struct_size(c, buffer_tree, num_locks), GFP_KERNEL); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/overflow.h:436:37: note: expanded from macro 'struct_size' 436 | sizeof(*(p)) + flex_array_size(p, member, count), \ | ^ include/linux/overflow.h:421:63: note: expanded from macro 'flex_array_size' 421 | size_mul(count, sizeof(*(p)->member) + __must_be_array((p)->member))) | ^ include/linux/compiler.h:208:64: note: expanded from macro '__must_be_array' 208 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^ note: (skipping 3 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/slab.h:1190:52: note: expanded from macro 'kzalloc' 1190 | #define kzalloc(...) alloc_hooks(kzalloc_noprof(__VA_ARGS__)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ include/linux/alloc_tag.h:265:31: note: expanded from macro 'alloc_hooks' 265 | alloc_hooks_tag(&_alloc_tag, _do_alloc); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ include/linux/alloc_tag.h:255:10: note: expanded from macro 'alloc_hooks_tag' 255 | _res = _do_alloc; \ | ^~~~~~~~~ >> drivers/md/dm-bufio.c:2514:29: error: no member named 'buffer_tree' in >> 'struct dm_bufio_client' 2514 | c = kzalloc(struct_size(c, buffer_tree, num_locks), GFP_KERNEL); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/overflow.h:437:45: note: expanded from macro 'struct_size' 437 | size_add(sizeof(*(p)), flex_array_size(p, member, count))) | ^ include/linux/overflow.h:420:26: note: expanded from macro 'flex_array_size' 420 | (count) * sizeof(*(p)->member) + __must_be_array((p)->member), \ | ^ include/linux/slab.h:1190:52: note: expanded from macro 'kzalloc' 1190 | #define kzalloc(...) alloc_hooks(kzalloc_noprof(__VA_ARGS__)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ include/linux/alloc_tag.h:265:31: note: expanded from macro 'alloc_hooks' 265 | alloc_hooks_tag(&_alloc_tag, _do_alloc); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ include/linux/alloc_tag.h:255:10: note: expanded from macro 'alloc_hooks_tag' 255 | _res = _do_alloc; \ | ^~~~~~~~~ >> drivers/md/dm-bufio.c:2514:29: error: no member named 'buffer_tree' in >> 'struct dm_bufio_client' 2514 | c = kzalloc(struct_size(c, buffer_tree, num_locks), GFP_KERNEL); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/overflow.h:437:45: note: expanded from macro 'struct_size' 437 | size_add(sizeof(*(p)), flex_array_size(p, member, count))) | ^ include/linux/overflow.h:420:57: note: expanded from macro 'flex_array_size' 420 | (count) * sizeof(*(p)->member) + __must_be_array((p)->member), \ | ^ include/linux/compiler.h:208:64: note: expanded from macro '__must_be_array' 208 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^ note: (skipping 3 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/slab.h:1190:52: note: expanded from macro 'kzalloc' 1190 | #define kzalloc(...) alloc_hooks(kzalloc_noprof(__VA_ARGS__)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ include/linux/alloc_tag.h:265:31: note: expanded from macro 'alloc_hooks' 265 | alloc_hooks_tag(&_alloc_tag, _do_alloc); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ include/linux/alloc_tag.h:255:10: note: expanded from macro 'alloc_hooks_tag' 255 | _res = _do_alloc; \ | ^~~~~~~~~ >> drivers/md/dm-bufio.c:2514:29: error: no member named 'buffer_tree' in >> 'struct dm_bufio_client' 2514 | c = kzalloc(struct_size(c, buffer_tree, num_locks), GFP_KERNEL); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/overflow.h:437:45: note: expanded from macro 'struct_size' 437 | size_add(sizeof(*(p)), flex_array_size(p, member, count))) | ^ include/linux/overflow.h:421:32: note: expanded from macro 'flex_array_size' 421 | size_mul(count, sizeof(*(p)->member) + __must_be_array((p)->member))) | ^ include/linux/slab.h:1190:52: note: expanded from macro 'kzalloc' 1190 | #define kzalloc(...) alloc_hooks(kzalloc_noprof(__VA_ARGS__)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ include/linux/alloc_tag.h:265:31: note: expanded from macro 'alloc_hooks' 265 | alloc_hooks_tag(&_alloc_tag, _do_alloc); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ include/linux/alloc_tag.h:255:10: note: expanded from macro 'alloc_hooks_tag' 255 | _res = _do_alloc; \ | ^~~~~~~~~ >> drivers/md/dm-bufio.c:2514:29: error: no member named 'buffer_tree' in >> 'struct dm_bufio_client' 2514 | c = kzalloc(struct_size(c, buffer_tree, num_locks), GFP_KERNEL); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/overflow.h:437:45: note: expanded from macro 'struct_size' 437 | size_add(sizeof(*(p)), flex_array_size(p, member, count))) | ^ include/linux/overflow.h:421:63: note: expanded from macro 'flex_array_size' 421 | size_mul(count, sizeof(*(p)->member) + __must_be_array((p)->member))) | ^ include/linux/compiler.h:208:64: note: expanded from macro '__must_be_array' 208 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^ note: (skipping 3 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/slab.h:1190:52: note: expanded from macro 'kzalloc' 1190 | #define kzalloc(...) alloc_hooks(kzalloc_noprof(__VA_ARGS__)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ include/linux/alloc_tag.h:265:31: note: expanded from macro 'alloc_hooks' 265 | alloc_hooks_tag(&_alloc_tag, _do_alloc); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ include/linux/alloc_tag.h:255:10: note: expanded from macro 'alloc_hooks_tag' 255 | _res = _do_alloc; \ | ^~~~~~~~~ >> drivers/md/dm-bufio.c:2514:29: error: no member named 'buffer_tree' in >> 'struct dm_bufio_client' 2514 | c = kzalloc(struct_size(c, buffer_tree, num_locks), GFP_KERNEL); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/overflow.h:436:37: note: expanded from macro 'struct_size' 436 | sizeof(*(p)) + flex_array_size(p, member, count), \ | ^ include/linux/overflow.h:420:26: note: expanded from macro 'flex_array_size' 420 | (count) * sizeof(*(p)->member) + __must_be_array((p)->member), \ | ^ include/linux/slab.h:1190:52: note: expanded from macro 'kzalloc' 1190 | #define kzalloc(...) alloc_hooks(kzalloc_noprof(__VA_ARGS__)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ include/linux/alloc_tag.h:265:31: note: expanded from macro 'alloc_hooks' 265 | alloc_hooks_tag(&_alloc_tag, _do_alloc); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ include/linux/alloc_tag.h:258:10: note: expanded from macro 'alloc_hooks_tag' 258 | _res = _do_alloc; \ | ^~~~~~~~~ >> drivers/md/dm-bufio.c:2514:29: error: no member named 'buffer_tree' in >> 'struct dm_bufio_client' 2514 | c = kzalloc(struct_size(c, buffer_tree, num_locks), GFP_KERNEL); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/overflow.h:436:37: note: expanded from macro 'struct_size' 436 | sizeof(*(p)) + flex_array_size(p, member, count), \ | ^ include/linux/overflow.h:420:57: note: expanded from macro 'flex_array_size' 420 | (count) * sizeof(*(p)->member) + __must_be_array((p)->member), \ | ^ include/linux/compiler.h:208:64: note: expanded from macro '__must_be_array' 208 | #define __must_be_array(a) __BUILD_BUG_ON_ZERO_MSG(!__is_array(a), \ | ^ note: (skipping 3 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/slab.h:1190:52: note: expanded from macro 'kzalloc' 1190 | #define kzalloc(...) alloc_hooks(kzalloc_noprof(__VA_ARGS__)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ include/linux/alloc_tag.h:265:31: note: expanded from macro 'alloc_hooks' 265 | alloc_hooks_tag(&_alloc_tag, _do_alloc); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ include/linux/alloc_tag.h:258:10: note: expanded from macro 'alloc_hooks_tag' 258 | _res = _do_alloc; \ | ^~~~~~~~~ >> drivers/md/dm-bufio.c:2514:29: error: no member named 'buffer_tree' in >> 'struct dm_bufio_client' 2514 | c = kzalloc(struct_size(c, buffer_tree, num_locks), GFP_KERNEL); | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/overflow.h:436:37: note: expanded from macro 'struct_size' 436 | sizeof(*(p)) + flex_array_size(p, member, count), \ | ^ include/linux/overflow.h:421:32: note: expanded from macro 'flex_array_size' 421 | size_mul(count, sizeof(*(p)->member) + __must_be_array((p)->member))) | ^ include/linux/slab.h:1190:52: note: expanded from macro 'kzalloc' 1190 | #define kzalloc(...) alloc_hooks(kzalloc_noprof(__VA_ARGS__)) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ include/linux/alloc_tag.h:265:31: note: expanded from macro 'alloc_hooks' 265 | alloc_hooks_tag(&_alloc_tag, _do_alloc); \ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~ include/linux/alloc_tag.h:258:10: note: expanded from macro 'alloc_hooks_tag' 258 | _res = _do_alloc; \ | ^~~~~~~~~ fatal error: too many errors emitted, stopping now [-ferror-limit=] 20 errors generated. vim +2514 drivers/md/dm-bufio.c 2491 2492 /* 2493 * Create the buffering interface 2494 */ 2495 struct dm_bufio_client *dm_bufio_client_create(struct block_device *bdev, unsigned int block_size, 2496 unsigned int reserved_buffers, unsigned int aux_size, 2497 void (*alloc_callback)(struct dm_buffer *), 2498 void (*write_callback)(struct dm_buffer *), 2499 unsigned int flags) 2500 { 2501 int r; 2502 unsigned int num_locks; 2503 struct dm_bufio_client *c; 2504 char slab_name[64]; 2505 static atomic_t seqno = ATOMIC_INIT(0); 2506 2507 if (!block_size || block_size & ((1 << SECTOR_SHIFT) - 1)) { 2508 DMERR("%s: block size not specified or is not multiple of 512b", __func__); 2509 r = -EINVAL; 2510 goto bad_client; 2511 } 2512 2513 num_locks = dm_num_hash_locks(); > 2514 c = kzalloc(struct_size(c, buffer_tree, num_locks), GFP_KERNEL); 2515 if (!c) { 2516 r = -ENOMEM; 2517 goto bad_client; 2518 } 2519 cache_init(&c->cache, num_locks, (flags & DM_BUFIO_CLIENT_NO_SLEEP) != 0); 2520 2521 c->bdev = bdev; 2522 c->block_size = block_size; 2523 if (is_power_of_2(block_size)) 2524 c->sectors_per_block_bits = __ffs(block_size) - SECTOR_SHIFT; 2525 else 2526 c->sectors_per_block_bits = -1; 2527 2528 c->alloc_callback = alloc_callback; 2529 c->write_callback = write_callback; 2530 2531 if (flags & DM_BUFIO_CLIENT_NO_SLEEP) { 2532 c->no_sleep = true; 2533 static_branch_inc(&no_sleep_enabled); 2534 } 2535 2536 mutex_init(&c->lock); 2537 spin_lock_init(&c->spinlock); 2538 INIT_LIST_HEAD(&c->reserved_buffers); 2539 c->need_reserved_buffers = reserved_buffers; 2540 2541 dm_bufio_set_minimum_buffers(c, DM_BUFIO_MIN_BUFFERS); 2542 2543 init_waitqueue_head(&c->free_buffer_wait); 2544 c->async_write_error = 0; 2545 2546 c->dm_io = dm_io_client_create(); 2547 if (IS_ERR(c->dm_io)) { 2548 r = PTR_ERR(c->dm_io); 2549 goto bad_dm_io; 2550 } 2551 2552 if (block_size <= KMALLOC_MAX_SIZE && !is_power_of_2(block_size)) { 2553 unsigned int align = min(1U << __ffs(block_size), (unsigned int)PAGE_SIZE); 2554 2555 snprintf(slab_name, sizeof(slab_name), "dm_bufio_cache-%u-%u", 2556 block_size, atomic_inc_return(&seqno)); 2557 c->slab_cache = kmem_cache_create(slab_name, block_size, align, 2558 SLAB_RECLAIM_ACCOUNT, NULL); 2559 if (!c->slab_cache) { 2560 r = -ENOMEM; 2561 goto bad; 2562 } 2563 } 2564 if (aux_size) 2565 snprintf(slab_name, sizeof(slab_name), "dm_bufio_buffer-%u-%u", 2566 aux_size, atomic_inc_return(&seqno)); 2567 else 2568 snprintf(slab_name, sizeof(slab_name), "dm_bufio_buffer-%u", 2569 atomic_inc_return(&seqno)); 2570 c->slab_buffer = kmem_cache_create(slab_name, sizeof(struct dm_buffer) + aux_size, 2571 0, SLAB_RECLAIM_ACCOUNT, NULL); 2572 if (!c->slab_buffer) { 2573 r = -ENOMEM; 2574 goto bad; 2575 } 2576 2577 while (c->need_reserved_buffers) { 2578 struct dm_buffer *b = alloc_buffer(c, GFP_KERNEL); 2579 2580 if (!b) { 2581 r = -ENOMEM; 2582 goto bad; 2583 } 2584 __free_buffer_wake(b); 2585 } 2586 2587 INIT_WORK(&c->shrink_work, shrink_work); 2588 atomic_long_set(&c->need_shrink, 0); 2589 2590 c->shrinker = shrinker_alloc(0, "dm-bufio:(%u:%u)", 2591 MAJOR(bdev->bd_dev), MINOR(bdev->bd_dev)); 2592 if (!c->shrinker) { 2593 r = -ENOMEM; 2594 goto bad; 2595 } 2596 2597 c->shrinker->count_objects = dm_bufio_shrink_count; 2598 c->shrinker->scan_objects = dm_bufio_shrink_scan; 2599 c->shrinker->seeks = 1; 2600 c->shrinker->batch = 0; 2601 c->shrinker->private_data = c; 2602 2603 shrinker_register(c->shrinker); 2604 2605 mutex_lock(&dm_bufio_clients_lock); 2606 dm_bufio_client_count++; 2607 list_add(&c->client_list, &dm_bufio_all_clients); 2608 __cache_size_refresh(); 2609 mutex_unlock(&dm_bufio_clients_lock); 2610 2611 return c; 2612 2613 bad: 2614 while (!list_empty(&c->reserved_buffers)) { 2615 struct dm_buffer *b = list_to_buffer(c->reserved_buffers.next); 2616 2617 list_del(&b->lru.list); 2618 free_buffer(b); 2619 } 2620 kmem_cache_destroy(c->slab_cache); 2621 kmem_cache_destroy(c->slab_buffer); 2622 dm_io_client_destroy(c->dm_io); 2623 bad_dm_io: 2624 mutex_destroy(&c->lock); 2625 if (c->no_sleep) 2626 static_branch_dec(&no_sleep_enabled); 2627 kfree(c); 2628 bad_client: 2629 return ERR_PTR(r); 2630 } 2631 EXPORT_SYMBOL_GPL(dm_bufio_client_create); 2632 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki

