aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSuresh Jayaraman <sjayaraman@suse.de>2010-07-05 08:43:36 -0400
committerSteve French <sfrench@us.ibm.com>2010-08-02 08:40:37 -0400
commitfa1df75d4debde6d843e616df656f50a92958737 (patch)
tree51ed23f935dcd4536417613cf88c2dcfc369fd08
parent56698236e1294848c63d4768673865ae5a9c69e0 (diff)
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>
-rw-r--r--fs/cifs/cifs_fs_sb.h1
-rw-r--r--fs/cifs/connect.c8
2 files changed, 9 insertions, 0 deletions
diff --git a/fs/cifs/cifs_fs_sb.h b/fs/cifs/cifs_fs_sb.h
index 246a167cb913..9e771450c3b8 100644
--- a/fs/cifs/cifs_fs_sb.h
+++ b/fs/cifs/cifs_fs_sb.h
@@ -35,6 +35,7 @@
35#define CIFS_MOUNT_DYNPERM 0x1000 /* allow in-memory only mode setting */ 35#define CIFS_MOUNT_DYNPERM 0x1000 /* allow in-memory only mode setting */
36#define CIFS_MOUNT_NOPOSIXBRL 0x2000 /* mandatory not posix byte range lock */ 36#define CIFS_MOUNT_NOPOSIXBRL 0x2000 /* mandatory not posix byte range lock */
37#define CIFS_MOUNT_NOSSYNC 0x4000 /* don't do slow SMBflush on every sync*/ 37#define CIFS_MOUNT_NOSSYNC 0x4000 /* don't do slow SMBflush on every sync*/
38#define CIFS_MOUNT_FSCACHE 0x8000 /* local caching enabled */
38 39
39struct cifs_sb_info { 40struct cifs_sb_info {
40 struct cifsTconInfo *tcon; /* primary mount */ 41 struct cifsTconInfo *tcon; /* primary mount */
diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
index 6e1fe3a7f27d..399b60129b74 100644
--- a/fs/cifs/connect.c
+++ b/fs/cifs/connect.c
@@ -98,6 +98,7 @@ struct smb_vol {
98 bool noblocksnd:1; 98 bool noblocksnd:1;
99 bool noautotune:1; 99 bool noautotune:1;
100 bool nostrictsync:1; /* do not force expensive SMBflush on every sync */ 100 bool nostrictsync:1; /* do not force expensive SMBflush on every sync */
101 bool fsc:1; /* enable fscache */
101 unsigned int rsize; 102 unsigned int rsize;
102 unsigned int wsize; 103 unsigned int wsize;
103 bool sockopt_tcp_nodelay:1; 104 bool sockopt_tcp_nodelay:1;
@@ -843,6 +844,9 @@ cifs_parse_mount_options(char *options, const char *devname,
843 /* default to using server inode numbers where available */ 844 /* default to using server inode numbers where available */
844 vol->server_ino = 1; 845 vol->server_ino = 1;
845 846
847 /* XXX: default to fsc for testing until mount.cifs pieces are done */
848 vol->fsc = 1;
849
846 if (!options) 850 if (!options)
847 return 1; 851 return 1;
848 852
@@ -1332,6 +1336,8 @@ cifs_parse_mount_options(char *options, const char *devname,
1332 printk(KERN_WARNING "CIFS: Mount option noac not " 1336 printk(KERN_WARNING "CIFS: Mount option noac not "
1333 "supported. Instead set " 1337 "supported. Instead set "
1334 "/proc/fs/cifs/LookupCacheEnabled to 0\n"); 1338 "/proc/fs/cifs/LookupCacheEnabled to 0\n");
1339 } else if (strnicmp(data, "fsc", 3) == 0) {
1340 vol->fsc = true;
1335 } else 1341 } else
1336 printk(KERN_WARNING "CIFS: Unknown mount option %s\n", 1342 printk(KERN_WARNING "CIFS: Unknown mount option %s\n",
1337 data); 1343 data);
@@ -2463,6 +2469,8 @@ static void setup_cifs_sb(struct smb_vol *pvolume_info,
2463 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_OVERR_GID; 2469 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_OVERR_GID;
2464 if (pvolume_info->dynperm) 2470 if (pvolume_info->dynperm)
2465 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_DYNPERM; 2471 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_DYNPERM;
2472 if (pvolume_info->fsc)
2473 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_FSCACHE;
2466 if (pvolume_info->direct_io) { 2474 if (pvolume_info->direct_io) {
2467 cFYI(1, "mounting share using direct i/o"); 2475 cFYI(1, "mounting share using direct i/o");
2468 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_DIRECT_IO; 2476 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_DIRECT_IO;