On Thu, 21 Aug 2014 08:24:35 -0500 Steve French <smfrench@xxxxxxxxx> wrote: > If you are opening O_DIRECT why wouldn't you use oplock, ie still > request oplock, simply to minimize metadata traffic (you don't have to > send stat across the wire). The reads and writes aren't cached but > the inode metadata would be. > What updates the i_size if a DIO write extends the file? > On Thu, Aug 21, 2014 at 6:26 AM, Jeff Layton <jlayton@xxxxxxxxxxxxxxx> wrote: > > On Wed, 20 Aug 2014 19:39:11 +0900 > > Namjae Jeon <namjae.jeon@xxxxxxxxxxx> wrote: > > > >> Currently cifs have all or nothing approach for directIO operations. > >> cache=strict mode does not allow directIO while cache=none mode performs > >> all the operations as directIO even when user does not specify O_DIRECT > >> flag. This patch enables strict cache mode to honour directIO semantics. > >> > >> Signed-off-by: Namjae Jeon <namjae.jeon@xxxxxxxxxxx> > >> Signed-off-by: Ashish Sangwan <a.sangwan@xxxxxxxxxxx> > >> --- > >> fs/cifs/dir.c | 4 ++++ > >> fs/cifs/file.c | 4 ++++ > >> 2 files changed, 8 insertions(+), 0 deletions(-) > >> > >> diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c > >> index 3db0c5f..30e377c 100644 > >> --- a/fs/cifs/dir.c > >> +++ b/fs/cifs/dir.c > >> @@ -497,6 +497,10 @@ cifs_atomic_open(struct inode *inode, struct dentry *direntry, > >> goto out; > >> } > >> > >> + if (file->f_flags & O_DIRECT && > >> + CIFS_SB(inode->i_sb)->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO) > >> + file->f_op = &cifs_file_direct_ops; > >> + > >> file_info = cifs_new_fileinfo(&fid, file, tlink, oplock); > >> if (file_info == NULL) { > >> if (server->ops->close) > >> diff --git a/fs/cifs/file.c b/fs/cifs/file.c > >> index bee733e..0d07740 100644 > >> --- a/fs/cifs/file.c > >> +++ b/fs/cifs/file.c > >> @@ -467,6 +467,10 @@ int cifs_open(struct inode *inode, struct file *file) > >> cifs_dbg(FYI, "inode = 0x%p file flags are 0x%x for %s\n", > >> inode, file->f_flags, full_path); > >> > >> + if (file->f_flags & O_DIRECT && > >> + cifs_sb->mnt_cifs_flags & CIFS_MOUNT_STRICT_IO) > >> + file->f_op = &cifs_file_direct_ops; > >> + > >> if (server->oplocks) > >> oplock = REQ_OPLOCK; > >> else > > > > Looks fine for the most part. You should also avoid requesting an > > oplock if you're going to open O_DIRECT since you won't be using it > > anyway. > > > > -- > > Jeff Layton <jlayton@xxxxxxxxxxxxxxx> > > > -- Jeff Layton <jlayton@xxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-cifs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html