Messages in this thread Patch in this message | | | Date | Fri, 31 Mar 2006 07:17:36 +1000 | From | Nathan Scott <> | Subject | Re: [patch 1/1] sys_sync_file_range() |
| |
On Thu, Mar 30, 2006 at 06:58:46PM +1100, Neil Brown wrote: > On Wednesday March 29, akpm@osdl.org 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |