cifs: add mount option to enable local caching
Add a mount option 'fsc' to enable local caching on CIFS. I considered adding a separate debug bit for caching, but it appears that debugging would be relatively easier with the normal CIFS_INFO level. As the cifs-utils (userspace) changes are not done yet, this patch enables 'fsc' by default to enable testing. Signed-off-by: Suresh Jayaraman <sjayaraman@suse.de> Acked-by: David Howells <dhowells@redhat.com> Signed-off-by: Steve French <sfrench@us.ibm.com>
This commit is contained in:
parent
56698236e1
commit
fa1df75d4d
|
@ -35,6 +35,7 @@
|
||||||
#define CIFS_MOUNT_DYNPERM 0x1000 /* allow in-memory only mode setting */
|
#define CIFS_MOUNT_DYNPERM 0x1000 /* allow in-memory only mode setting */
|
||||||
#define CIFS_MOUNT_NOPOSIXBRL 0x2000 /* mandatory not posix byte range lock */
|
#define CIFS_MOUNT_NOPOSIXBRL 0x2000 /* mandatory not posix byte range lock */
|
||||||
#define CIFS_MOUNT_NOSSYNC 0x4000 /* don't do slow SMBflush on every sync*/
|
#define CIFS_MOUNT_NOSSYNC 0x4000 /* don't do slow SMBflush on every sync*/
|
||||||
|
#define CIFS_MOUNT_FSCACHE 0x8000 /* local caching enabled */
|
||||||
|
|
||||||
struct cifs_sb_info {
|
struct cifs_sb_info {
|
||||||
struct cifsTconInfo *tcon; /* primary mount */
|
struct cifsTconInfo *tcon; /* primary mount */
|
||||||
|
|
|
@ -98,6 +98,7 @@ struct smb_vol {
|
||||||
bool noblocksnd:1;
|
bool noblocksnd:1;
|
||||||
bool noautotune:1;
|
bool noautotune:1;
|
||||||
bool nostrictsync:1; /* do not force expensive SMBflush on every sync */
|
bool nostrictsync:1; /* do not force expensive SMBflush on every sync */
|
||||||
|
bool fsc:1; /* enable fscache */
|
||||||
unsigned int rsize;
|
unsigned int rsize;
|
||||||
unsigned int wsize;
|
unsigned int wsize;
|
||||||
bool sockopt_tcp_nodelay:1;
|
bool sockopt_tcp_nodelay:1;
|
||||||
|
@ -843,6 +844,9 @@ cifs_parse_mount_options(char *options, const char *devname,
|
||||||
/* default to using server inode numbers where available */
|
/* default to using server inode numbers where available */
|
||||||
vol->server_ino = 1;
|
vol->server_ino = 1;
|
||||||
|
|
||||||
|
/* XXX: default to fsc for testing until mount.cifs pieces are done */
|
||||||
|
vol->fsc = 1;
|
||||||
|
|
||||||
if (!options)
|
if (!options)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
@ -1332,6 +1336,8 @@ cifs_parse_mount_options(char *options, const char *devname,
|
||||||
printk(KERN_WARNING "CIFS: Mount option noac not "
|
printk(KERN_WARNING "CIFS: Mount option noac not "
|
||||||
"supported. Instead set "
|
"supported. Instead set "
|
||||||
"/proc/fs/cifs/LookupCacheEnabled to 0\n");
|
"/proc/fs/cifs/LookupCacheEnabled to 0\n");
|
||||||
|
} else if (strnicmp(data, "fsc", 3) == 0) {
|
||||||
|
vol->fsc = true;
|
||||||
} else
|
} else
|
||||||
printk(KERN_WARNING "CIFS: Unknown mount option %s\n",
|
printk(KERN_WARNING "CIFS: Unknown mount option %s\n",
|
||||||
data);
|
data);
|
||||||
|
@ -2463,6 +2469,8 @@ static void setup_cifs_sb(struct smb_vol *pvolume_info,
|
||||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_OVERR_GID;
|
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_OVERR_GID;
|
||||||
if (pvolume_info->dynperm)
|
if (pvolume_info->dynperm)
|
||||||
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_DYNPERM;
|
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_DYNPERM;
|
||||||
|
if (pvolume_info->fsc)
|
||||||
|
cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_FSCACHE;
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue