Re: [patch 1/1] sys_sync_file_range()

From: Nathan Scott
Date: Thu Mar 30 2006 - 16:15:20 EST


On Thu, Mar 30, 2006 at 06:58:46PM +1100, Neil Brown wrote:
> On Wednesday March 29, akpm@xxxxxxxx wrote:
> > Remove the recently-added LINUX_FADV_ASYNC_WRITE and LINUX_FADV_WRITE_WAIT
> > fadvise() additions, do it in a new sys_sync_file_range() syscall
> > instead.
>
> Hmmm... any chance this could be split into a sys_sync_file_range and
> a vfs_sync_file_range which takes a 'struct file*' and does less (or
> no) sanity checking, so I can call it from nfsd?
>
> Currently I implement COMMIT (which has a range) with a by messing
> around with filemap_fdatawrite and filemap_fdatawait (ignoring the
> range) and I'd rather than a vfs helper.

I'm not 100% sure, but it looks like the PF_SYNCWRITE process flag
should be set on the nfsd's while they're doing that, which doesn't
seem to be happening atm. Looks like a couple of the IO schedulers
will make use of that knowledge now. All the more reason for a VFS
helper here I guess. ;)

cheers.

--
Nathan


Index: 2.6.x-xfs/fs/nfsd/vfs.c
===================================================================
--- 2.6.x-xfs.orig/fs/nfsd/vfs.c
+++ 2.6.x-xfs/fs/nfsd/vfs.c
@@ -712,11 +712,13 @@ static inline int nfsd_dosync(struct fil
int (*fsync) (struct file *, struct dentry *, int);
int err;

+ current->flags |= PF_SYNCWRITE;
err = filemap_fdatawrite(inode->i_mapping);
if (err == 0 && fop && (fsync = fop->fsync))
err = fsync(filp, dp, 0);
if (err == 0)
err = filemap_fdatawait(inode->i_mapping);
+ current->flags &= ~PF_SYNCWRITE;

return err;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/