On Fri, Jan 28, 2022 at 1:32 PM Jane Chu <jane.chu@xxxxxxxxxx> wrote: > > If one of the MD raid participating target dax device supports > DAXDEV_RECOVERY, then it'll be declared on the whole that the > MD device is capable of DAXDEV_RECOVERY. > And only when the recovery process reaches to the target driver, > it becomes deterministic whether a certain dax address range > maybe recovered, or not. > > Signed-off-by: Jane Chu <jane.chu@xxxxxxxxxx> > --- > drivers/md/dm-table.c | 33 +++++++++++++++++++++++++++++++++ > 1 file changed, 33 insertions(+) > > diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c > index e43096cfe9e2..8af8a81b6172 100644 > --- a/drivers/md/dm-table.c > +++ b/drivers/md/dm-table.c > @@ -844,6 +844,36 @@ static bool dm_table_supports_dax(struct dm_table *t, > return true; > } > > +/* Check whether device is capable of dax poison recovery */ > +static int device_poison_recovery_capable(struct dm_target *ti, > + struct dm_dev *dev, sector_t start, sector_t len, void *data) > +{ > + if (!dev->dax_dev) > + return false; > + return dax_recovery_capable(dev->dax_dev); Hmm it's not clear to me that dax_recovery_capable is necessary. If a dax_dev does not support recovery it can simply fail the dax_direct_access() call with the DAX_RECOVERY flag set. So all DM needs to worry about is passing the new @flags parameter through the stack.