cifs: Allow directIO read/write during cache=strict
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@samsung.com> Signed-off-by: Ashish Sangwan <a.sangwan@samsung.com> Signed-off-by: Steve French <smfrench@gmail.com>
This commit is contained in:
parent
d4a029d215
commit
787aded650
2 changed files with 16 additions and 0 deletions
|
@ -497,6 +497,14 @@ 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) {
|
||||
if (CIFS_SB(inode->i_sb)->mnt_cifs_flags & CIFS_MOUNT_NO_BRL)
|
||||
file->f_op = &cifs_file_direct_nobrl_ops;
|
||||
else
|
||||
file->f_op = &cifs_file_direct_ops;
|
||||
}
|
||||
|
||||
file_info = cifs_new_fileinfo(&fid, file, tlink, oplock);
|
||||
if (file_info == NULL) {
|
||||
if (server->ops->close)
|
||||
|
|
|
@ -467,6 +467,14 @@ 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) {
|
||||
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_BRL)
|
||||
file->f_op = &cifs_file_direct_nobrl_ops;
|
||||
else
|
||||
file->f_op = &cifs_file_direct_ops;
|
||||
}
|
||||
|
||||
if (server->oplocks)
|
||||
oplock = REQ_OPLOCK;
|
||||
else
|
||||
|
|
Loading…
Reference in a new issue