Skip to content

Commit

Permalink
block: change the hash used for looking up block devices
Browse files Browse the repository at this point in the history
Adding the minor to the major creates tons of pointless conflicts. Just
use the dev_t itself, which is 32-bits and thus is guaranteed to fit
into ino_t.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
  • Loading branch information
Christoph Hellwig authored and Jens Axboe committed Dec 1, 2020
1 parent efdc41c commit 612c6aa
Showing 1 changed file with 2 additions and 24 deletions.
26 changes: 2 additions & 24 deletions fs/block_dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -863,35 +863,12 @@ void __init bdev_cache_init(void)
blockdev_superblock = bd_mnt->mnt_sb; /* For writeback */
}

/*
* Most likely _very_ bad one - but then it's hardly critical for small
* /dev and can be fixed when somebody will need really large one.
* Keep in mind that it will be fed through icache hash function too.
*/
static inline unsigned long hash(dev_t dev)
{
return MAJOR(dev)+MINOR(dev);
}

static int bdev_test(struct inode *inode, void *data)
{
return BDEV_I(inode)->bdev.bd_dev == *(dev_t *)data;
}

static int bdev_set(struct inode *inode, void *data)
{
BDEV_I(inode)->bdev.bd_dev = *(dev_t *)data;
return 0;
}

static struct block_device *bdget(dev_t dev)
{
struct block_device *bdev;
struct inode *inode;

inode = iget5_locked(blockdev_superblock, hash(dev),
bdev_test, bdev_set, &dev);

inode = iget_locked(blockdev_superblock, dev);
if (!inode)
return NULL;

Expand All @@ -903,6 +880,7 @@ static struct block_device *bdget(dev_t dev)
bdev->bd_super = NULL;
bdev->bd_inode = inode;
bdev->bd_part_count = 0;
bdev->bd_dev = dev;
inode->i_mode = S_IFBLK;
inode->i_rdev = dev;
inode->i_bdev = bdev;
Expand Down

0 comments on commit 612c6aa

Please sign in to comment.