Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

block: move the NEED_PART_SCAN flag to struct gendisk

We can only scan for partitions on the whole disk, so move the flag
from struct block_device to struct gendisk.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>

authored by

Christoph Hellwig and committed by
Jens Axboe
38430f08 07d098e6

+13 -14
+2 -2
block/genhd.c
··· 731 731 if (!bdev) 732 732 goto exit; 733 733 734 - set_bit(BDEV_NEED_PART_SCAN, &bdev->bd_flags); 734 + set_bit(GD_NEED_PART_SCAN, &disk->state); 735 735 err = blkdev_get(bdev, FMODE_READ, NULL); 736 736 if (err < 0) 737 737 goto exit; ··· 2112 2112 if (__invalidate_device(bdev, true)) 2113 2113 pr_warn("VFS: busy inodes on changed media %s\n", 2114 2114 bdev->bd_disk->disk_name); 2115 - set_bit(BDEV_NEED_PART_SCAN, &bdev->bd_flags); 2115 + set_bit(GD_NEED_PART_SCAN, &bdev->bd_disk->state); 2116 2116 return true; 2117 2117 } 2118 2118 EXPORT_SYMBOL(bdev_check_media_change);
+4 -4
drivers/block/nbd.c
··· 315 315 bd_set_nr_sectors(bdev, nr_sectors); 316 316 set_blocksize(bdev, config->blksize); 317 317 } else 318 - set_bit(BDEV_NEED_PART_SCAN, &bdev->bd_flags); 318 + set_bit(GD_NEED_PART_SCAN, &nbd->disk->state); 319 319 bdput(bdev); 320 320 } 321 321 kobject_uevent(&nbd_to_dev(nbd)->kobj, KOBJ_CHANGE); ··· 1322 1322 return ret; 1323 1323 1324 1324 if (max_part) 1325 - set_bit(BDEV_NEED_PART_SCAN, &bdev->bd_flags); 1325 + set_bit(GD_NEED_PART_SCAN, &nbd->disk->state); 1326 1326 mutex_unlock(&nbd->config_lock); 1327 1327 ret = wait_event_interruptible(config->recv_wq, 1328 1328 atomic_read(&config->recv_threads) == 0); ··· 1500 1500 refcount_set(&nbd->config_refs, 1); 1501 1501 refcount_inc(&nbd->refs); 1502 1502 mutex_unlock(&nbd->config_lock); 1503 - set_bit(BDEV_NEED_PART_SCAN, &bdev->bd_flags); 1503 + set_bit(GD_NEED_PART_SCAN, &bdev->bd_disk->state); 1504 1504 } else if (nbd_disconnected(nbd->config)) { 1505 - set_bit(BDEV_NEED_PART_SCAN, &bdev->bd_flags); 1505 + set_bit(GD_NEED_PART_SCAN, &bdev->bd_disk->state); 1506 1506 } 1507 1507 out: 1508 1508 mutex_unlock(&nbd_index_mutex);
+1 -1
drivers/ide/ide-gd.c
··· 230 230 bdev->bd_disk->disk_name); 231 231 drive->disk_ops->get_capacity(drive); 232 232 set_capacity(disk, ide_gd_capacity(drive)); 233 - set_bit(BDEV_NEED_PART_SCAN, &bdev->bd_flags); 233 + set_bit(GD_NEED_PART_SCAN, &disk->state); 234 234 } else if (drive->dev_flags & IDE_DFLAG_FORMAT_IN_PROGRESS) { 235 235 ret = -EBUSY; 236 236 goto out_put_idkp;
+3 -4
fs/block_dev.c
··· 910 910 bdev->bd_super = NULL; 911 911 bdev->bd_inode = inode; 912 912 bdev->bd_part_count = 0; 913 - bdev->bd_flags = 0; 914 913 inode->i_mode = S_IFBLK; 915 914 inode->i_rdev = dev; 916 915 inode->i_bdev = bdev; ··· 1384 1385 1385 1386 lockdep_assert_held(&bdev->bd_mutex); 1386 1387 1387 - clear_bit(BDEV_NEED_PART_SCAN, &bdev->bd_flags); 1388 + clear_bit(GD_NEED_PART_SCAN, &bdev->bd_disk->state); 1388 1389 1389 1390 rescan: 1390 1391 ret = blk_drop_partitions(bdev); ··· 1508 1509 * The latter is necessary to prevent ghost 1509 1510 * partitions on a removed medium. 1510 1511 */ 1511 - if (test_bit(BDEV_NEED_PART_SCAN, &bdev->bd_flags) && 1512 + if (test_bit(GD_NEED_PART_SCAN, &disk->state) && 1512 1513 (!ret || ret == -ENOMEDIUM)) 1513 1514 bdev_disk_changed(bdev, ret == -ENOMEDIUM); 1514 1515 ··· 1538 1539 if (bdev->bd_disk->fops->open) 1539 1540 ret = bdev->bd_disk->fops->open(bdev, mode); 1540 1541 /* the same as first opener case, read comment there */ 1541 - if (test_bit(BDEV_NEED_PART_SCAN, &bdev->bd_flags) && 1542 + if (test_bit(GD_NEED_PART_SCAN, &disk->state) && 1542 1543 (!ret || ret == -ENOMEDIUM)) 1543 1544 bdev_disk_changed(bdev, ret == -ENOMEDIUM); 1544 1545 if (ret)
+1 -3
include/linux/blk_types.h
··· 19 19 typedef void (bio_end_io_t) (struct bio *); 20 20 struct bio_crypt_ctx; 21 21 22 - #define BDEV_NEED_PART_SCAN 0 23 - 24 22 struct block_device { 25 23 dev_t bd_dev; 26 24 int bd_openers; ··· 37 39 struct hd_struct * bd_part; 38 40 /* number of times partitions within this device have been opened. */ 39 41 unsigned bd_part_count; 40 - unsigned long bd_flags; 42 + 41 43 spinlock_t bd_size_lock; /* for bd_inode->i_size updates */ 42 44 struct gendisk * bd_disk; 43 45 struct backing_dev_info *bd_bdi;
+2
include/linux/genhd.h
··· 191 191 void *private_data; 192 192 193 193 int flags; 194 + unsigned long state; 195 + #define GD_NEED_PART_SCAN 0 194 196 struct rw_semaphore lookup_sem; 195 197 struct kobject *slave_dir; 196 198