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-c...
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/1de14b707f1a3e49fa4412b1eb8391f09...
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(a)intel.com>
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