cifs: add "mfsymlinks" mount option
authorStefan Metzmacher <metze@samba.org>
Fri, 30 Jul 2010 12:56:00 +0000 (14:56 +0200)
committerSteve French <sfrench@us.ibm.com>
Wed, 29 Sep 2010 19:04:31 +0000 (19:04 +0000)
This is the start for an implementation of "Minshall+French Symlinks"
(see http://wiki.samba.org/index.php/UNIX_Extensions#Minshall.2BFrench_symlinks).

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Steve French <sfrench@us.ibm.com>
fs/cifs/README
fs/cifs/cifsfs.c
fs/cifs/connect.c

index 7099a526f775d24325c7d2c6ebd213faf1d6d87c..ee68d1036544d591930af8119d5e7450634adfff 100644 (file)
@@ -527,6 +527,11 @@ A partial list of the supported mount options follows:
                SFU does).  In the future the bottom 9 bits of the
                mode also will be emulated using queries of the security
                descriptor (ACL).
+ mfsymlinks     Enable support for Minshall+French symlinks
+               (see http://wiki.samba.org/index.php/UNIX_Extensions#Minshall.2BFrench_symlinks)
+               This option is ignored when specified together with the
+               'sfu' option. Minshall+French symlinks are used even if
+               the server supports the CIFS Unix Extensions.
  sign           Must use packet signing (helps avoid unwanted data modification
                by intermediate systems in the route).  Note that signing
                does not work with lanman or plaintext authentication.
index 1b6ddd6f760f34c58a6b43c293d46c0033349996..52e89ea07458bff74f2bb5819533d2d2118bc861 100644 (file)
@@ -441,6 +441,8 @@ cifs_show_options(struct seq_file *s, struct vfsmount *m)
                seq_printf(s, ",dynperm");
        if (m->mnt_sb->s_flags & MS_POSIXACL)
                seq_printf(s, ",acl");
+       if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MF_SYMLINKS)
+               seq_printf(s, ",mfsymlinks");
 
        seq_printf(s, ",rsize=%d", cifs_sb->rsize);
        seq_printf(s, ",wsize=%d", cifs_sb->wsize);
index fa884520fb84a9c5c588385f0d799da5ea9a3765..435b912f5de5b7de04305a9c9f99ab940d2aa206 100644 (file)
@@ -100,6 +100,7 @@ struct smb_vol {
        bool noautotune:1;
        bool nostrictsync:1; /* do not force expensive SMBflush on every sync */
        bool fsc:1;     /* enable fscache */
+       bool mfsymlinks:1; /* use Minshall+French Symlinks */
        unsigned int rsize;
        unsigned int wsize;
        bool sockopt_tcp_nodelay:1;
@@ -1342,6 +1343,8 @@ cifs_parse_mount_options(char *options, const char *devname,
                                "/proc/fs/cifs/LookupCacheEnabled to 0\n");
                } else if (strnicmp(data, "fsc", 3) == 0) {
                        vol->fsc = true;
+               } else if (strnicmp(data, "mfsymlinks", 10) == 0) {
+                       vol->mfsymlinks = true;
                } else
                        printk(KERN_WARNING "CIFS: Unknown mount option %s\n",
                                                data);
@@ -2554,6 +2557,14 @@ static void setup_cifs_sb(struct smb_vol *pvolume_info,
                cFYI(1, "mounting share using direct i/o");
                cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_DIRECT_IO;
        }
+       if (pvolume_info->mfsymlinks) {
+               if (pvolume_info->sfu_emul) {
+                       cERROR(1,  "mount option mfsymlinks ignored if sfu "
+                                  "mount option is used");
+               } else {
+                       cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_MF_SYMLINKS;
+               }
+       }
 
        if ((pvolume_info->cifs_acl) && (pvolume_info->dynperm))
                cERROR(1, "mount option dynperm ignored if cifsacl "
This page took 0.029335 seconds and 5 git commands to generate.