diff options
author | Suresh Jayaraman <sjayaraman@suse.de> | 2010-07-05 08:43:36 -0400 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2010-08-02 08:40:37 -0400 |
commit | fa1df75d4debde6d843e616df656f50a92958737 (patch) | |
tree | 51ed23f935dcd4536417613cf88c2dcfc369fd08 /fs/cifs | |
parent | 56698236e1294848c63d4768673865ae5a9c69e0 (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>
Diffstat (limited to 'fs/cifs')
-rw-r--r-- | fs/cifs/cifs_fs_sb.h | 1 | ||||
-rw-r--r-- | fs/cifs/connect.c | 8 |
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 | ||
39 | struct cifs_sb_info { | 40 | struct 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; |