CIFS: Add strictcache mount option
Use for switching on strict cache mode. In this mode the client reads from the cache all the time it has Oplock Level II, otherwise - read from the server. As for write - the client stores a data in the cache in Exclusive Oplock case, otherwise - write directly to the server. Signed-off-by: Pavel Shilovsky <piastryyy@gmail.com> Reviewed-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
committed by
Steve French
parent
72432ffcf5
commit
d39454ffe4
@@ -452,6 +452,11 @@ A partial list of the supported mount options follows:
|
|||||||
if oplock (caching token) is granted and held. Note that
|
if oplock (caching token) is granted and held. Note that
|
||||||
direct allows write operations larger than page size
|
direct allows write operations larger than page size
|
||||||
to be sent to the server.
|
to be sent to the server.
|
||||||
|
strictcache Use for switching on strict cache mode. In this mode the
|
||||||
|
client read from the cache all the time it has Oplock Level II,
|
||||||
|
otherwise - read from the server. All written data are stored
|
||||||
|
in the cache, but if the client doesn't have Exclusive Oplock,
|
||||||
|
it writes the data to the server.
|
||||||
acl Allow setfacl and getfacl to manage posix ACLs if server
|
acl Allow setfacl and getfacl to manage posix ACLs if server
|
||||||
supports them. (default)
|
supports them. (default)
|
||||||
noacl Do not allow setfacl and getfacl calls on this mount
|
noacl Do not allow setfacl and getfacl calls on this mount
|
||||||
|
@@ -87,6 +87,7 @@ struct smb_vol {
|
|||||||
bool no_xattr:1; /* set if xattr (EA) support should be disabled*/
|
bool no_xattr:1; /* set if xattr (EA) support should be disabled*/
|
||||||
bool server_ino:1; /* use inode numbers from server ie UniqueId */
|
bool server_ino:1; /* use inode numbers from server ie UniqueId */
|
||||||
bool direct_io:1;
|
bool direct_io:1;
|
||||||
|
bool strict_io:1; /* strict cache behavior */
|
||||||
bool remap:1; /* set to remap seven reserved chars in filenames */
|
bool remap:1; /* set to remap seven reserved chars in filenames */
|
||||||
bool posix_paths:1; /* unset to not ask for posix pathnames. */
|
bool posix_paths:1; /* unset to not ask for posix pathnames. */
|
||||||
bool no_linux_ext:1;
|
bool no_linux_ext:1;
|
||||||
@@ -1344,6 +1345,8 @@ cifs_parse_mount_options(char *options, const char *devname,
|
|||||||
vol->direct_io = 1;
|
vol->direct_io = 1;
|
||||||
} else if (strnicmp(data, "forcedirectio", 13) == 0) {
|
} else if (strnicmp(data, "forcedirectio", 13) == 0) {
|
||||||
vol->direct_io = 1;
|
vol->direct_io = 1;
|
||||||
|
} else if (strnicmp(data, "strictcache", 11) == 0) {
|
||||||
|
vol->strict_io = 1;
|
||||||
} else if (strnicmp(data, "noac", 4) == 0) {
|
} else if (strnicmp(data, "noac", 4) == 0) {
|
||||||
printk(KERN_WARNING "CIFS: Mount option noac not "
|
printk(KERN_WARNING "CIFS: Mount option noac not "
|
||||||
"supported. Instead set "
|
"supported. Instead set "
|
||||||
@@ -2584,6 +2587,8 @@ static void setup_cifs_sb(struct smb_vol *pvolume_info,
|
|||||||
if (pvolume_info->multiuser)
|
if (pvolume_info->multiuser)
|
||||||
cifs_sb->mnt_cifs_flags |= (CIFS_MOUNT_MULTIUSER |
|
cifs_sb->mnt_cifs_flags |= (CIFS_MOUNT_MULTIUSER |
|
||||||
CIFS_MOUNT_NO_PERM);
|
CIFS_MOUNT_NO_PERM);
|
||||||
|
if (pvolume_info->strict_io)
|
||||||
|
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_STRICT_IO;
|
||||||
if (pvolume_info->direct_io) {
|
if (pvolume_info->direct_io) {
|
||||||
cFYI(1, "mounting share using direct i/o");
|
cFYI(1, "mounting share using direct i/o");
|
||||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_DIRECT_IO;
|
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_DIRECT_IO;
|
||||||
|
Reference in New Issue
Block a user