On Tue, Mar 22, 2022 at 11:05:09PM +0000, Jane Chu wrote: > > This DAX_RECOVERY doesn't actually seem to be used anywhere here or > > in the subsequent patches. Did I miss something? > > dax_iomap_iter() uses the flag in the same patch, > + if ((map_len == -EIO) && (iov_iter_rw(iter) == WRITE)) { > + flags |= DAX_RECOVERY; > + map_len = dax_direct_access(dax_dev, pgoff, nrpg, > + flags, &kaddr, NULL); Yes, it passes it on to dax_direct_access, and dax_direct_access passes it onto ->direct_access. But nothing in this series actually checks for it as far as I can tell. > >> Also introduce a new dev_pagemap_ops .recovery_write function. > >> The function is applicable to FSDAX device only. The device > >> page backend driver provides .recovery_write function if the > >> device has underlying mechanism to clear the uncorrectable > >> errors on the fly. > > > > Why is this not in struct dax_operations? > > Per Dan's comments to the v5 series, adding .recovery_write to > dax_operations causes a number of trivial dm targets changes. > Dan suggested that adding .recovery_write to pagemap_ops could > cut short the logistics of figuring out whether the driver backing > up a page is indeed capable of clearing poison. Please see > https://lkml.org/lkml/2022/2/4/31 But at least in this series there is 1:1 association between the pgmap and the dax_device so that scheme won't work. It would have to lookup the pgmap based on the return physical address from dax_direct_access. Which sounds more complicated than just adding the (annoying) boilerplate code to DM. > include/linux/memremap.h doesn't know struct iov_iter which is defined > in include/linux/uio.h, would you prefer to adding include/linux/uio.h > to include/linux/memremap.h ? As it is not derefences just adding a struct iov_iter; line to memremap.h below the includes should be all that is needed.