RE: [PATCH 1/3] fsdax: Factor helpers to simplify dax fault code

From: ruansy.fnst@xxxxxxxxxxx
Date: Wed Apr 07 2021 - 08:29:32 EST




> -----Original Message-----
> From: Matthew Wilcox <willy@xxxxxxxxxxxxx>
> Sent: Wednesday, April 7, 2021 7:14 PM
> To: Ruan, Shiyang/阮 世阳 <ruansy.fnst@xxxxxxxxxxx>
> Cc: linux-kernel@xxxxxxxxxxxxxxx; linux-xfs@xxxxxxxxxxxxxxx;
> linux-nvdimm@xxxxxxxxxxxx; linux-fsdevel@xxxxxxxxxxxxxxx;
> darrick.wong@xxxxxxxxxx; dan.j.williams@xxxxxxxxx; jack@xxxxxxx;
> viro@xxxxxxxxxxxxxxxxxx; linux-btrfs@xxxxxxxxxxxxxxx; david@xxxxxxxxxxxxx;
> hch@xxxxxx; rgoldwyn@xxxxxxx; Ritesh Harjani <riteshh@xxxxxxxxx>
> Subject: Re: [PATCH 1/3] fsdax: Factor helpers to simplify dax fault code
>
> On Wed, Apr 07, 2021 at 02:32:05PM +0800, Shiyang Ruan wrote:
> > +static int dax_fault_cow_page(struct vm_fault *vmf, struct iomap *iomap,
> > + loff_t pos, vm_fault_t *ret)
> > +{
> > + int error = 0;
> > + unsigned long vaddr = vmf->address;
> > + sector_t sector = dax_iomap_sector(iomap, pos);
> > +
> > + switch (iomap->type) {
> > + case IOMAP_HOLE:
> > + case IOMAP_UNWRITTEN:
> > + clear_user_highpage(vmf->cow_page, vaddr);
> > + break;
> > + case IOMAP_MAPPED:
> > + error = copy_cow_page_dax(iomap->bdev, iomap->dax_dev,
> > + sector, vmf->cow_page, vaddr);
> > + break;
> > + default:
> > + WARN_ON_ONCE(1);
> > + error = -EIO;
> > + break;
> > + }
> > +
> > + if (error)
> > + return error;
> > +
> > + __SetPageUptodate(vmf->cow_page);
> > + *ret = finish_fault(vmf);
> > + if (!*ret)
> > + *ret = VM_FAULT_DONE_COW;
> > + return 0;
> > +}
> ...
>
> > + error = dax_fault_cow_page(vmf, &iomap, pos, &ret);
> > if (error)
> > + ret = dax_fault_return(error);
> > goto finish_iomap;
>
> This seems unnecessarily complex. Why not return the vm_fault_t instead of
> returning the errno and then converting it?

Yes, I'll fix it.


--
Thanks,
Ruan Shiyang.