On Wed, Oct 27 2021 at 8:16P -0400, Dan Williams <dan.j.williams@xxxxxxxxx> wrote: > I am going to change the subject of this patch to: > > dax: remove ->dax_supported() > > On Sun, Oct 17, 2021 at 9:41 PM Christoph Hellwig <hch@xxxxxx> wrote: > > > > I'll add a bit more background to help others review this. > > The ->dax_supported() operation arranges for a stack of devices to > each answer the question "is dax operational". That request routes to > generic_fsdax_supported() at last level device and that attempted an > actual dax_direct_access() call and did some sanity checks. However, > those sanity checks can be validated in other ways and with those > removed the only question to answer is "has each block device driver > in the stack performed dax_add_host()". That can be validated without > a dax_operation. So, just open code the block size and dax_dev == NULL > checks in the callers, and delete ->dax_supported(). > > Mike, let me know if you have any concerns. Thanks for your additional background, it helped. > > > Just open code the block size and dax_dev == NULL checks in the callers. > > > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > > --- > > drivers/dax/super.c | 36 ------------------------------------ > > drivers/md/dm-table.c | 22 +++++++++++----------- > > drivers/md/dm.c | 21 --------------------- > > drivers/md/dm.h | 4 ---- > > drivers/nvdimm/pmem.c | 1 - > > drivers/s390/block/dcssblk.c | 1 - > > fs/erofs/super.c | 11 +++++++---- > > fs/ext2/super.c | 6 ++++-- > > fs/ext4/super.c | 9 ++++++--- > > fs/xfs/xfs_super.c | 21 ++++++++------------- > > include/linux/dax.h | 14 -------------- > > 11 files changed, 36 insertions(+), 110 deletions(-) > > > > diff --git a/drivers/dax/super.c b/drivers/dax/super.c > > index 482fe775324a4..803942586d1b6 100644 > > --- a/drivers/dax/super.c > > +++ b/drivers/dax/super.c > > @@ -108,42 +108,6 @@ struct dax_device *fs_dax_get_by_bdev(struct block_device *bdev) > > return dax_dev; > > } > > EXPORT_SYMBOL_GPL(fs_dax_get_by_bdev); > > - > > -bool generic_fsdax_supported(struct dax_device *dax_dev, > > - struct block_device *bdev, int blocksize, sector_t start, > > - sector_t sectors) > > -{ > > - if (blocksize != PAGE_SIZE) { > > - pr_info("%pg: error: unsupported blocksize for dax\n", bdev); > > - return false; > > - } > > - > > - if (!dax_dev) { > > - pr_debug("%pg: error: dax unsupported by block device\n", bdev); > > - return false; > > - } > > - > > - return true; > > -} > > -EXPORT_SYMBOL_GPL(generic_fsdax_supported); > > - > > -bool dax_supported(struct dax_device *dax_dev, struct block_device *bdev, > > - int blocksize, sector_t start, sector_t len) > > -{ > > - bool ret = false; > > - int id; > > - > > - if (!dax_dev) > > - return false; > > - > > - id = dax_read_lock(); > > - if (dax_alive(dax_dev) && dax_dev->ops->dax_supported) > > - ret = dax_dev->ops->dax_supported(dax_dev, bdev, blocksize, > > - start, len); > > - dax_read_unlock(id); > > - return ret; > > -} > > -EXPORT_SYMBOL_GPL(dax_supported); > > #endif /* CONFIG_BLOCK && CONFIG_FS_DAX */ > > > > enum dax_device_flags { > > diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c > > index 1fa4d5582dca5..4ae671c2168ea 100644 > > --- a/drivers/md/dm-table.c > > +++ b/drivers/md/dm-table.c > > @@ -807,12 +807,14 @@ void dm_table_set_type(struct dm_table *t, enum dm_queue_mode type) > > EXPORT_SYMBOL_GPL(dm_table_set_type); > > > > /* validate the dax capability of the target device span */ > > -int device_not_dax_capable(struct dm_target *ti, struct dm_dev *dev, > > +static int device_not_dax_capable(struct dm_target *ti, struct dm_dev *dev, > > sector_t start, sector_t len, void *data) > > { > > - int blocksize = *(int *) data; > > + if (dev->dax_dev) > > + return false; > > > > - return !dax_supported(dev->dax_dev, dev->bdev, blocksize, start, len); > > + pr_debug("%pg: error: dax unsupported by block device\n", dev->bdev); Would prefer the use of DMDEBUG() here (which doesn't need trailing \n) But otherwise: Acked-by: Mike Snitzer <snitzer@xxxxxxxxxx>