Re: [PATCH v3] block: genhd: don't call probe function with major_names_lock held
From: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
Date: 2021-08-15 07:52:27
Subsystem:
the rest · Maintainer:
Linus Torvalds
On 2021/08/15 16:06, Greg KH wrote:
On Sun, Aug 15, 2021 at 03:52:45PM +0900, Tetsuo Handa wrote:quoted
--- a/include/linux/genhd.h +++ b/include/linux/genhd.h@@ -303,9 +303,9 @@ struct gendisk *__blk_alloc_disk(int node); void blk_cleanup_disk(struct gendisk *disk); int __register_blkdev(unsigned int major, const char *name, - void (*probe)(dev_t devt)); + void (*probe)(dev_t devt), struct module *owner); #define register_blkdev(major, name) \ - __register_blkdev(major, name, NULL) + __register_blkdev(major, name, NULL, NULL) void unregister_blkdev(unsigned int major, const char *name);Do not force modules to put their own THIS_MODULE macro as a parameter, put it in the .h file so that it happens automagically, much like the usb_register() define in include/linux/usb.h is created.
Sure. We can do like below.
diff --git a/include/linux/genhd.h b/include/linux/genhd.h
index 13b34177cc85..70f00641fa11 100644
--- a/include/linux/genhd.h
+++ b/include/linux/genhd.h@@ -302,10 +302,12 @@ extern void put_disk(struct gendisk *disk); struct gendisk *__blk_alloc_disk(int node); void blk_cleanup_disk(struct gendisk *disk); -int __register_blkdev(unsigned int major, const char *name, - void (*probe)(dev_t devt)); +int ____register_blkdev(unsigned int major, const char *name, + void (*probe)(dev_t devt), struct module *owner); +#define __register_blkdev(major, name, probe) \ + ____register_blkdev(major, name, probe, THIS_MODULE) #define register_blkdev(major, name) \ - __register_blkdev(major, name, NULL) + ____register_blkdev(major, name, NULL, NULL) void unregister_blkdev(unsigned int major, const char *name); bool bdev_check_media_change(struct block_device *bdev);
If you do that, you can probably get rid of the __register_blkdev() direct calls as well...
I assume "automagically" implies "do not patch individual unregister_blkdev() / __register_blkdev() callers". But "removing __register_blkdev() direct calls" requires "patching individual __register_blkdev() callers". I didn't catch what you suggested here. Anyway, since this patch should be backported to 5.11+ kernels, lines changed should be kept minimal. We can do whatever remapping after this patch.