On Wed 03-01-24 13:54:59, Christian Brauner wrote: > +struct file *bdev_file_open_by_dev(dev_t dev, blk_mode_t mode, void *holder, > + const struct blk_holder_ops *hops) > +{ > + struct file *file; > + struct bdev_handle *handle; > + unsigned int flags; > + > + handle = bdev_open_by_dev(dev, mode, holder, hops); > + if (IS_ERR(handle)) > + return ERR_CAST(handle); > + > + flags = blk_to_file_flags(mode); > + file = alloc_file_pseudo(handle->bdev->bd_inode, blockdev_mnt, "", > + flags | O_LARGEFILE, &def_blk_fops); > + if (IS_ERR(file)) { > + bdev_release(handle); > + return file; > + } > + ihold(handle->bdev->bd_inode); > + > + file->f_mode |= FMODE_BUF_RASYNC | FMODE_CAN_ODIRECT | FMODE_NOACCOUNT; > + if (bdev_nowait(handle->bdev)) > + file->f_mode |= FMODE_NOWAIT; > + > + file->f_mapping = handle->bdev->bd_inode->i_mapping; > + file->f_wb_err = filemap_sample_wb_err(file->f_mapping); > + file->private_data = handle; > + return file; Maybe I'm dense but when the file is closed where do we drop the bdev_handle? Honza -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR