On Tue, Nov 24, 2020 at 02:27:29PM +0100, Christoph Hellwig wrote: > Switch the block device lookup interfaces to directly work with a dev_t > so that struct block_device references are only acquired by the > blkdev_get variants (and the blk-cgroup special case). This means that > we not don't need an extra reference in the inode and can generally ^ now > simplify handling of struct block_device to keep the lookups contained > in the core block layer code. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> ... > @@ -1689,14 +1599,12 @@ static int blkdev_open(struct inode * inode, struct file * filp) > if ((filp->f_flags & O_ACCMODE) == 3) > filp->f_mode |= FMODE_WRITE_IOCTL; > > - bdev = bd_acquire(inode); > - if (bdev == NULL) > - return -ENOMEM; > - > + bdev = blkdev_get_by_dev(inode->i_rdev, filp->f_mode, filp); > + if (IS_ERR(bdev)) > + return PTR_ERR(bdev); > filp->f_mapping = bdev->bd_inode->i_mapping; > filp->f_wb_err = filemap_sample_wb_err(filp->f_mapping); > - > - return blkdev_get(bdev, filp->f_mode, filp); > + return 0; > } I was wondering whether losing the stale bdev flushing in bd_acquire() would cause user-visible behavior changes but can't see how it would given that userland has no way of holding onto a specific instance of block inode. Maybe it's something worth mentioning in the commit message? Other than that, for the block part: Acked-by: Tejun Heo <tj@xxxxxxxxxx> Thanks. -- tejun