Thread (26 messages) 26 messages, 5 authors, 2021-08-21

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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help