Re: [PATCH v2] block: genhd: don't call probe function with major_names_lock held

From: kernel test robot
Date: Sat Jun 19 2021 - 02:16:31 EST


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 <lkp@xxxxxxxxx>

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@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip