Hi Tetsuo, I love your patch! Perhaps something to improve: [auto build test WARNING on linux/master] [also build test WARNING on linus/master v5.13-rc6] [cannot apply to block/for-next next-20210618] [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/Tetsuo-Handa/block-genhd-don-t-call-probe-function-with-major_names_lock-held/20210619-090731 base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git dd860052c99b1e088352bdd4fb7aef46f8d2ef47 config: x86_64-randconfig-a004-20210618 (attached as .config) compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project d1baf2895467735ab14f4b3415fce204c0cc8e7f) 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/1de14b707f1a3e49fa4412b1eb8391f09747a005 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Tetsuo-Handa/block-genhd-don-t-call-probe-function-with-major_names_lock-held/20210619-090731 git checkout 1de14b707f1a3e49fa4412b1eb8391f09747a005 # 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 All warnings (new ones prefixed by >>): >> block/genhd.c:223: warning: expecting prototype for __register_blkdev(). Prototype was for ____register_blkdev() instead vim +223 block/genhd.c ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 196 9e8c0bccdc944b block/genhd.c Márton Németh 2009-02-20 197 /** e2b6b301871719 block/genhd.c Christoph Hellwig 2020-11-14 198 * __register_blkdev - register a new block device 9e8c0bccdc944b block/genhd.c Márton Németh 2009-02-20 199 * f33ff110ef31bd block/genhd.c Srivatsa S. Bhat 2018-02-05 200 * @major: the requested major device number [1..BLKDEV_MAJOR_MAX-1]. If f33ff110ef31bd block/genhd.c Srivatsa S. Bhat 2018-02-05 201 * @major = 0, try to allocate any unused major number. 9e8c0bccdc944b block/genhd.c Márton Németh 2009-02-20 202 * @name: the name of the new block device as a zero terminated string 1de14b707f1a3e block/genhd.c Tetsuo Handa 2021-06-19 203 * @probe: callback that is called on access to any minor number of @major 1de14b707f1a3e block/genhd.c Tetsuo Handa 2021-06-19 204 * @owner: the owner of @probe function (i.e. THIS_MODULE or NULL). 9e8c0bccdc944b block/genhd.c Márton Németh 2009-02-20 205 * 9e8c0bccdc944b block/genhd.c Márton Németh 2009-02-20 206 * The @name must be unique within the system. 9e8c0bccdc944b block/genhd.c Márton Németh 2009-02-20 207 * 0e056eb5530da8 block/genhd.c Mauro Carvalho Chehab 2017-03-30 208 * The return value depends on the @major input parameter: 0e056eb5530da8 block/genhd.c Mauro Carvalho Chehab 2017-03-30 209 * f33ff110ef31bd block/genhd.c Srivatsa S. Bhat 2018-02-05 210 * - if a major device number was requested in range [1..BLKDEV_MAJOR_MAX-1] f33ff110ef31bd block/genhd.c Srivatsa S. Bhat 2018-02-05 211 * then the function returns zero on success, or a negative error code 9e8c0bccdc944b block/genhd.c Márton Németh 2009-02-20 212 * - if any unused major number was requested with @major = 0 parameter 9e8c0bccdc944b block/genhd.c Márton Németh 2009-02-20 213 * then the return value is the allocated major number in range f33ff110ef31bd block/genhd.c Srivatsa S. Bhat 2018-02-05 214 * [1..BLKDEV_MAJOR_MAX-1] or a negative error code otherwise f33ff110ef31bd block/genhd.c Srivatsa S. Bhat 2018-02-05 215 * f33ff110ef31bd block/genhd.c Srivatsa S. Bhat 2018-02-05 216 * See Documentation/admin-guide/devices.txt for the list of allocated f33ff110ef31bd block/genhd.c Srivatsa S. Bhat 2018-02-05 217 * major numbers. e2b6b301871719 block/genhd.c Christoph Hellwig 2020-11-14 218 * e2b6b301871719 block/genhd.c Christoph Hellwig 2020-11-14 219 * Use register_blkdev instead for any new code. 9e8c0bccdc944b block/genhd.c Márton Németh 2009-02-20 220 */ 1de14b707f1a3e block/genhd.c Tetsuo Handa 2021-06-19 221 int ____register_blkdev(unsigned int major, const char *name, 1de14b707f1a3e block/genhd.c Tetsuo Handa 2021-06-19 222 void (*probe)(dev_t devt), struct module *owner) ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 @223 { ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 224 struct blk_major_name **n, *p; ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 225 int index, ret = 0; ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 226 e49fbbbf0aa14f block/genhd.c Christoph Hellwig 2020-10-29 227 mutex_lock(&major_names_lock); ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 228 ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 229 /* temporary */ ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 230 if (major == 0) { ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 231 for (index = ARRAY_SIZE(major_names)-1; index > 0; index--) { ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 232 if (major_names[index] == NULL) ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 233 break; ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 234 } ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 235 ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 236 if (index == 0) { dfc76d11dd455a block/genhd.c Keyur Patel 2019-02-17 237 printk("%s: failed to get major for %s\n", dfc76d11dd455a block/genhd.c Keyur Patel 2019-02-17 238 __func__, name); ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 239 ret = -EBUSY; ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 240 goto out; ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 241 } ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 242 major = index; ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 243 ret = major; ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 244 } ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 245 133d55cdb2f1f9 block/genhd.c Logan Gunthorpe 2017-06-16 246 if (major >= BLKDEV_MAJOR_MAX) { dfc76d11dd455a block/genhd.c Keyur Patel 2019-02-17 247 pr_err("%s: major requested (%u) is greater than the maximum (%u) for %s\n", dfc76d11dd455a block/genhd.c Keyur Patel 2019-02-17 248 __func__, major, BLKDEV_MAJOR_MAX-1, name); 133d55cdb2f1f9 block/genhd.c Logan Gunthorpe 2017-06-16 249 133d55cdb2f1f9 block/genhd.c Logan Gunthorpe 2017-06-16 250 ret = -EINVAL; 133d55cdb2f1f9 block/genhd.c Logan Gunthorpe 2017-06-16 251 goto out; 133d55cdb2f1f9 block/genhd.c Logan Gunthorpe 2017-06-16 252 } 133d55cdb2f1f9 block/genhd.c Logan Gunthorpe 2017-06-16 253 ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 254 p = kmalloc(sizeof(struct blk_major_name), GFP_KERNEL); ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 255 if (p == NULL) { ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 256 ret = -ENOMEM; ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 257 goto out; ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 258 } ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 259 ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 260 p->major = major; a160c6159d4a0c block/genhd.c Christoph Hellwig 2020-10-29 261 p->probe = probe; 1de14b707f1a3e block/genhd.c Tetsuo Handa 2021-06-19 262 p->owner = owner; ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 263 strlcpy(p->name, name, sizeof(p->name)); ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 264 p->next = NULL; ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 265 index = major_to_index(major); ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 266 ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 267 for (n = &major_names[index]; *n; n = &(*n)->next) { ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 268 if ((*n)->major == major) ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 269 break; ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 270 } ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 271 if (!*n) ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 272 *n = p; ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 273 else ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 274 ret = -EBUSY; ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 275 ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 276 if (ret < 0) { f33ff110ef31bd block/genhd.c Srivatsa S. Bhat 2018-02-05 277 printk("register_blkdev: cannot get major %u for %s\n", ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 278 major, name); ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 279 kfree(p); ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 280 } ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 281 out: e49fbbbf0aa14f block/genhd.c Christoph Hellwig 2020-10-29 282 mutex_unlock(&major_names_lock); ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 283 return ret; ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 284 } 1de14b707f1a3e block/genhd.c Tetsuo Handa 2021-06-19 285 EXPORT_SYMBOL(____register_blkdev); ^1da177e4c3f41 drivers/block/genhd.c Linus Torvalds 2005-04-16 286 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org