All of lore.kernel.org
 help / color / mirror / Atom feed
* simplify gendisk lookup and remove struct block_device aliases v2
@ 2020-08-30  6:24 Christoph Hellwig
  2020-08-30  6:24 ` [PATCH 01/19] char_dev: replace cdev_map with an xarray Christoph Hellwig
                   ` (18 more replies)
  0 siblings, 19 replies; 29+ messages in thread
From: Christoph Hellwig @ 2020-08-30  6:24 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Greg Kroah-Hartman, Rafael J. Wysocki, Denis Efremov,
	David S. Miller, Song Liu, Al Viro, linux-block, linux-kernel,
	linux-ide, linux-raid, linux-scsi, linux-m68k

Hi all,

this series removes the annoying struct block_device aliases, which can
happen for a bunch of old floppy drivers (and z2ram).  In that case
multiple struct block device instances for different dev_t's can point
to the same gendisk, without being partitions.  The cause for that
is the probe/get callback registered through blk_register_regions.

This series removes blk_register_region entirely, splitting it it into
a simple xarray lookup of registered gendisks, and a probe callback
stored in the major_names array that can be used for modprobe overrides
or creating devices on demands when no gendisk is found.  The old
remapping is gone entirely, and instead the 4 remaining drivers just
register a gendisk for each operating mode.  In case of the two drivers
that have lots of aliases that is done on-demand using the new probe
callback, while for the other two I simply register all at probe time
to keep things simple.

Note that the m68k drivers are compile tested only.

Changes since v1:
 - add back a missing kobject_put in the cdev code
 - improve the xarray delete loops

Diffstat:
 b/block/genhd.c           |  183 +++++++--------
 b/drivers/base/Makefile   |    2 
 b/drivers/block/amiflop.c |   98 ++++----
 b/drivers/block/ataflop.c |  135 +++++++----
 b/drivers/block/brd.c     |   39 ---
 b/drivers/block/floppy.c  |  154 ++++++++----
 b/drivers/block/loop.c    |   30 --
 b/drivers/block/swim.c    |   17 -
 b/drivers/block/z2ram.c   |  547 ++++++++++++++++++++++------------------------
 b/drivers/ide/ide-probe.c |   66 -----
 b/drivers/ide/ide-tape.c  |    2 
 b/drivers/md/md.c         |   21 -
 b/drivers/scsi/sd.c       |   19 -
 b/fs/char_dev.c           |   94 +++----
 b/fs/dcache.c             |    1 
 b/fs/internal.h           |    5 
 b/include/linux/genhd.h   |   12 -
 b/include/linux/ide.h     |    3 
 drivers/base/map.c        |  154 ------------
 include/linux/kobj_map.h  |   20 -
 20 files changed, 686 insertions(+), 916 deletions(-)

^ permalink raw reply	[flat|nested] 29+ messages in thread
* simplify gendisk lookup and remove struct block_device aliases v3
@ 2020-09-03  8:01 Christoph Hellwig
  2020-09-03  8:01 ` [PATCH 14/19] floppy: use a separate gendisk for each media format Christoph Hellwig
  0 siblings, 1 reply; 29+ messages in thread
From: Christoph Hellwig @ 2020-09-03  8:01 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Greg Kroah-Hartman, Rafael J. Wysocki, Denis Efremov,
	David S. Miller, Song Liu, Al Viro, Finn Thain, Michael Schmitz,
	linux-block, linux-kernel, linux-ide, linux-raid, linux-scsi,
	linux-m68k

Hi all,

this series removes the annoying struct block_device aliases, which can
happen for a bunch of old floppy drivers (and z2ram).  In that case
multiple struct block device instances for different dev_t's can point
to the same gendisk, without being partitions.  The cause for that
is the probe/get callback registered through blk_register_regions.

This series removes blk_register_region entirely, splitting it it into
a simple xarray lookup of registered gendisks, and a probe callback
stored in the major_names array that can be used for modprobe overrides
or creating devices on demands when no gendisk is found.  The old
remapping is gone entirely, and instead the 4 remaining drivers just
register a gendisk for each operating mode.  In case of the two drivers
that have lots of aliases that is done on-demand using the new probe
callback, while for the other two I simply register all at probe time
to keep things simple.

Note that the m68k drivers are compile tested only.

Changes since v2:
 - fix a wrong variable passed to ERR_PTR in the floppy driver
 - slightly adjust the del_gendisk cleanups to prepare for the next
   series touching this area

Changes since v1:
 - add back a missing kobject_put in the cdev code
 - improve the xarray delete loops

Diffstat:
 b/block/genhd.c           |  183 +++++++--------
 b/drivers/base/Makefile   |    2 
 b/drivers/block/amiflop.c |   98 ++++----
 b/drivers/block/ataflop.c |  135 +++++++----
 b/drivers/block/brd.c     |   39 ---
 b/drivers/block/floppy.c  |  154 ++++++++----
 b/drivers/block/loop.c    |   30 --
 b/drivers/block/swim.c    |   17 -
 b/drivers/block/z2ram.c   |  547 ++++++++++++++++++++++------------------------
 b/drivers/ide/ide-probe.c |   66 -----
 b/drivers/ide/ide-tape.c  |    2 
 b/drivers/md/md.c         |   21 -
 b/drivers/scsi/sd.c       |   19 -
 b/fs/char_dev.c           |   94 +++----
 b/fs/dcache.c             |    1 
 b/fs/internal.h           |    5 
 b/include/linux/genhd.h   |   12 -
 b/include/linux/ide.h     |    3 
 drivers/base/map.c        |  154 ------------
 include/linux/kobj_map.h  |   20 -
 20 files changed, 686 insertions(+), 916 deletions(-)

^ permalink raw reply	[flat|nested] 29+ messages in thread
* Re: [PATCH 14/19] floppy: use a separate gendisk for each media format
@ 2020-08-30 14:01 kernel test robot
  0 siblings, 0 replies; 29+ messages in thread
From: kernel test robot @ 2020-08-30 14:01 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 5041 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <20200830062445.1199128-15-hch@lst.de>
References: <20200830062445.1199128-15-hch@lst.de>
TO: Christoph Hellwig <hch@lst.de>

Hi Christoph,

I love your patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[also build test WARNING on v5.9-rc2 next-20200828]
[cannot apply to block/for-next ide/master driver-core/driver-core-testing]
[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/Christoph-Hellwig/char_dev-replace-cdev_map-with-an-xarray/20200830-152505
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 1127b219ce9481c84edad9711626d856127d5e51
:::::: branch date: 7 hours ago
:::::: commit date: 7 hours ago
config: x86_64-randconfig-m001-20200830 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

New smatch warnings:
drivers/block/floppy.c:4592 floppy_alloc_disk() warn: passing a valid pointer to 'PTR_ERR'

Old smatch warnings:
drivers/block/floppy.c:2880 redo_fd_request() error: we previously assumed 'current_req' could be null (see line 2868)
drivers/block/floppy.c:3633 fd_locked_ioctl() error: uninitialized symbol 'outparam'.

# https://github.com/0day-ci/linux/commit/f08c4ae246f71af7908c08acf544e35dcc4b672b
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Christoph-Hellwig/char_dev-replace-cdev_map-with-an-xarray/20200830-152505
git checkout f08c4ae246f71af7908c08acf544e35dcc4b672b
vim +/PTR_ERR +4592 drivers/block/floppy.c

8d3ab4ebfd7435b Herton Ronaldo Krzesinski 2012-08-27  4580  
f08c4ae246f71af Christoph Hellwig         2020-08-30  4581  static int floppy_alloc_disk(unsigned int drive, unsigned int type)
^1da177e4c3f415 Linus Torvalds            2005-04-16  4582  {
f08c4ae246f71af Christoph Hellwig         2020-08-30  4583  	struct gendisk *disk;
f08c4ae246f71af Christoph Hellwig         2020-08-30  4584  	int err;
f08c4ae246f71af Christoph Hellwig         2020-08-30  4585  
f08c4ae246f71af Christoph Hellwig         2020-08-30  4586  	disk = alloc_disk(1);
f08c4ae246f71af Christoph Hellwig         2020-08-30  4587  	if (!disk)
f08c4ae246f71af Christoph Hellwig         2020-08-30  4588  		return -ENOMEM;
f08c4ae246f71af Christoph Hellwig         2020-08-30  4589  
f08c4ae246f71af Christoph Hellwig         2020-08-30  4590  	disk->queue = blk_mq_init_queue(&tag_sets[drive]);
f08c4ae246f71af Christoph Hellwig         2020-08-30  4591  	if (IS_ERR(disk->queue)) {
f08c4ae246f71af Christoph Hellwig         2020-08-30 @4592  		err = PTR_ERR(disk);
f08c4ae246f71af Christoph Hellwig         2020-08-30  4593  		disk->queue = NULL;
f08c4ae246f71af Christoph Hellwig         2020-08-30  4594  		put_disk(disk);
f08c4ae246f71af Christoph Hellwig         2020-08-30  4595  		return err;
f08c4ae246f71af Christoph Hellwig         2020-08-30  4596  	}
f08c4ae246f71af Christoph Hellwig         2020-08-30  4597  
f08c4ae246f71af Christoph Hellwig         2020-08-30  4598  	blk_queue_bounce_limit(disk->queue, BLK_BOUNCE_HIGH);
f08c4ae246f71af Christoph Hellwig         2020-08-30  4599  	blk_queue_max_hw_sectors(disk->queue, 64);
f08c4ae246f71af Christoph Hellwig         2020-08-30  4600  	disk->major = FLOPPY_MAJOR;
f08c4ae246f71af Christoph Hellwig         2020-08-30  4601  	disk->first_minor = TOMINOR(drive) | (type << 2);
f08c4ae246f71af Christoph Hellwig         2020-08-30  4602  	disk->fops = &floppy_fops;
f08c4ae246f71af Christoph Hellwig         2020-08-30  4603  	disk->events = DISK_EVENT_MEDIA_CHANGE;
f08c4ae246f71af Christoph Hellwig         2020-08-30  4604  	if (type)
f08c4ae246f71af Christoph Hellwig         2020-08-30  4605  		sprintf(disk->disk_name, "fd%d_type%d", drive, type);
f08c4ae246f71af Christoph Hellwig         2020-08-30  4606  	else
f08c4ae246f71af Christoph Hellwig         2020-08-30  4607  		sprintf(disk->disk_name, "fd%d", drive);
f08c4ae246f71af Christoph Hellwig         2020-08-30  4608  	/* to be cleaned up... */
f08c4ae246f71af Christoph Hellwig         2020-08-30  4609  	disk->private_data = (void *)(long)drive;
f08c4ae246f71af Christoph Hellwig         2020-08-30  4610  	disk->flags |= GENHD_FL_REMOVABLE;
f08c4ae246f71af Christoph Hellwig         2020-08-30  4611  
f08c4ae246f71af Christoph Hellwig         2020-08-30  4612  	disks[drive][type] = disk;
f08c4ae246f71af Christoph Hellwig         2020-08-30  4613  	return 0;
f08c4ae246f71af Christoph Hellwig         2020-08-30  4614  }
f08c4ae246f71af Christoph Hellwig         2020-08-30  4615  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 36656 bytes --]

^ permalink raw reply	[flat|nested] 29+ messages in thread
* simplify gendisk lookup and remove struct block_device aliases
@ 2020-08-26  6:24 Christoph Hellwig
  2020-08-26  6:24 ` [PATCH 14/19] floppy: use a separate gendisk for each media format Christoph Hellwig
  0 siblings, 1 reply; 29+ messages in thread
From: Christoph Hellwig @ 2020-08-26  6:24 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Greg Kroah-Hartman, Rafael J. Wysocki, Denis Efremov,
	David S. Miller, Song Liu, Al Viro, linux-block, linux-kernel,
	linux-ide, linux-raid, linux-scsi, linux-m68k

Hi all,

this series removes the annoying struct block_device aliases, which can
happen for a bunch of old floppy drivers (and z2ram).  In that case
multiple struct block device instances for different dev_t's can point
to the same gendisk, without being partitions.  The cause for that
is the probe/get callback registered through blk_register_regions.

This series removes blk_register_region entirely, splitting it it into
a simple xarray lookup of registered gendisks, and a probe callback
stored in the major_names array that can be used for modprobe overrides
or creating devices on demands when no gendisk is found.  The old
remapping is gone entirely, and instead the 4 remaining drivers just
register a gendisk for each operating mode.  In case of the two drivers
that have lots of aliases that is done on-demand using the new probe
callback, while for the other two I simply register all at probe time
to keep things simple.

Note that the m68k drivers are compile tested only.

Diffstat:
 b/block/genhd.c           |  183 +++++++--------
 b/drivers/base/Makefile   |    2 
 b/drivers/block/amiflop.c |   98 ++++----
 b/drivers/block/ataflop.c |  135 +++++++----
 b/drivers/block/brd.c     |   39 ---
 b/drivers/block/floppy.c  |  154 ++++++++----
 b/drivers/block/loop.c    |   30 --
 b/drivers/block/swim.c    |   17 -
 b/drivers/block/z2ram.c   |  551 ++++++++++++++++++++++------------------------
 b/drivers/ide/ide-probe.c |   66 -----
 b/drivers/ide/ide-tape.c  |    2 
 b/drivers/md/md.c         |   21 -
 b/drivers/scsi/sd.c       |   19 -
 b/fs/char_dev.c           |   94 +++----
 b/fs/dcache.c             |    1 
 b/fs/internal.h           |    5 
 b/include/linux/genhd.h   |   12 -
 b/include/linux/ide.h     |    3 
 drivers/base/map.c        |  154 ------------
 include/linux/kobj_map.h  |   20 -
 20 files changed, 686 insertions(+), 920 deletions(-)

^ permalink raw reply	[flat|nested] 29+ messages in thread

end of thread, other threads:[~2020-09-04 10:28 UTC | newest]

Thread overview: 29+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-08-30  6:24 simplify gendisk lookup and remove struct block_device aliases v2 Christoph Hellwig
2020-08-30  6:24 ` [PATCH 01/19] char_dev: replace cdev_map with an xarray Christoph Hellwig
2020-08-30  7:31   ` Greg Kroah-Hartman
2020-08-30  6:24 ` [PATCH 02/19] block: merge drivers/base/map.c into block/genhd.c Christoph Hellwig
2020-08-30  6:24 ` [PATCH 03/19] block: cleanup del_gendisk a bit Christoph Hellwig
2020-08-30  6:24 ` [PATCH 04/19] block: split block_class_lock Christoph Hellwig
2020-08-30  6:24 ` [PATCH 05/19] block: rework requesting modules for unclaimed devices Christoph Hellwig
2020-08-30  6:24 ` [PATCH 06/19] block: add an optional probe callback to major_names Christoph Hellwig
2020-08-30  6:24 ` [PATCH 07/19] ide: remove ide_{,un}register_region Christoph Hellwig
2020-08-30  6:24 ` [PATCH 08/19] swim: don't call blk_register_region Christoph Hellwig
2020-08-30  6:24 ` [PATCH 09/19] sd: use __register_blkdev to avoid a modprobe for an unregistered dev_t Christoph Hellwig
2020-08-30  6:24 ` [PATCH 10/19] brd: use __register_blkdev to allocate devices on demand Christoph Hellwig
2020-08-30  6:24 ` [PATCH 11/19] loop: " Christoph Hellwig
2020-08-30  6:24 ` [PATCH 12/19] md: " Christoph Hellwig
2020-08-30  6:24 ` [PATCH 13/19] ide: switch to __register_blkdev for command set probing Christoph Hellwig
2020-08-30  6:24 ` [PATCH 14/19] floppy: use a separate gendisk for each media format Christoph Hellwig
2020-08-31 12:43   ` Dan Carpenter
2020-08-31 12:43     ` Dan Carpenter
2020-08-30  6:24 ` [PATCH 15/19] amiflop: use separate gendisks for Amiga vs MS-DOS mode Christoph Hellwig
2020-08-30  6:24 ` [PATCH 16/19] ataflop: use a separate gendisk for each media format Christoph Hellwig
2020-08-30  6:24 ` [PATCH 17/19] z2ram: reindent Christoph Hellwig
2020-08-30  6:24 ` [PATCH 18/19] z2ram: use separate gendisk for the different modes Christoph Hellwig
2020-08-30  6:24 ` [PATCH 19/19] block: switch gendisk lookup to a simple xarray Christoph Hellwig
2020-08-30  7:35   ` Greg Kroah-Hartman
  -- strict thread matches above, loose matches on Subject: below --
2020-09-03  8:01 simplify gendisk lookup and remove struct block_device aliases v3 Christoph Hellwig
2020-09-03  8:01 ` [PATCH 14/19] floppy: use a separate gendisk for each media format Christoph Hellwig
2020-09-04  9:59   ` Denis Efremov
2020-09-04 10:28   ` Hannes Reinecke
2020-08-30 14:01 kernel test robot
2020-08-26  6:24 simplify gendisk lookup and remove struct block_device aliases Christoph Hellwig
2020-08-26  6:24 ` [PATCH 14/19] floppy: use a separate gendisk for each media format Christoph Hellwig

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.