On Fri, Oct 06, 2017 at 03:36:06PM -0700, Dan Williams wrote: > A 'lease_direct' lease requires that the vma have a valid MAP_DIRECT > mapping established. For xfs we establish a new lease and then check if > the MAP_DIRECT mapping has been broken. We want to be sure that the > process will receive notification that the MAP_DIRECT mapping is being > torn down so it knows why other code paths are throwing failures. > > For example in the RDMA/ibverbs case we want ibv_reg_mr() to fail if the > MAP_DIRECT mapping is invalid or in the process of being invalidated. > > Cc: Jan Kara <jack@xxxxxxx> > Cc: Jeff Moyer <jmoyer@xxxxxxxxxx> > Cc: Christoph Hellwig <hch@xxxxxx> > Cc: Dave Chinner <david@xxxxxxxxxxxxx> > Cc: "Darrick J. Wong" <darrick.wong@xxxxxxxxxx> > Cc: Ross Zwisler <ross.zwisler@xxxxxxxxxxxxxxx> > Cc: Jeff Layton <jlayton@xxxxxxxxxxxxxxx> > Cc: "J. Bruce Fields" <bfields@xxxxxxxxxxxx> > Signed-off-by: Dan Williams <dan.j.williams@xxxxxxxxx> > --- > fs/xfs/xfs_file.c | 28 ++++++++++++++++++++++++++++ > 1 file changed, 28 insertions(+) > > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index e35518600e28..823b65f17429 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -1166,6 +1166,33 @@ xfs_filemap_direct_close( > put_map_direct_vma(vma->vm_private_data); > } > > +static struct lease_direct * > +xfs_filemap_direct_lease( > + struct vm_area_struct *vma, > + void (*break_fn)(void *), > + void *owner) > +{ > + struct lease_direct *ld; > + > + ld = map_direct_lease(vma, break_fn, owner); > + > + if (IS_ERR(ld)) > + return ld; > + > + /* > + * We now have an established lease while the base MAP_DIRECT > + * lease was not broken. So, we know that the "lease holder" will > + * receive a SIGIO notification when the lease is broken and > + * take any necessary cleanup actions. > + */ > + if (!is_map_direct_broken(vma->vm_private_data)) > + return ld; > + > + map_direct_lease_destroy(ld); > + > + return ERR_PTR(-ENXIO); What's any of this got to do with XFS? Shouldn't it be in generic code, and called generic_filemap_direct_lease()? Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx