]> Pileus Git - ~andy/linux/commitdiff
[CIFS] Finish cifs mount option which requests case insensitive path
authorSteve French <sfrench@us.ibm.com>
Fri, 19 Aug 2005 18:04:29 +0000 (11:04 -0700)
committerSteve French <sfrench@us.ibm.com>
Fri, 19 Aug 2005 18:04:29 +0000 (11:04 -0700)
name matching.

Signed-off-by: Steve French (sfrench@us.ibm.com)
fs/cifs/cifs_fs_sb.h
fs/cifs/cifsglob.h
fs/cifs/connect.c
fs/cifs/misc.c

index 5fb695f1e50bbfc313ffabfe3012020789336563..f799f6f0e7296927af5bfc7203d2c5b489441de5 100644 (file)
@@ -26,8 +26,7 @@
 #define CIFS_MOUNT_MAP_SPECIAL_CHR 0x20 /* remap illegal chars in filenames */
 #define CIFS_MOUNT_POSIX_PATHS 0x40 /* Negotiate posix pathnames if possible. */
 #define CIFS_MOUNT_UNX_EMUL    0x80 /* Network compat with SFUnix emulation */
-#define CIFS_MOUNT_CASE_INSENS  0x100 /* Request case insenstive searches */
-#define CIFS_MOUNT_NO_BRL      0x200 /* No sending byte range locks to srv */
+#define CIFS_MOUNT_NO_BRL      0x100 /* No sending byte range locks to srv */
 
 struct cifs_sb_info {
        struct cifsTconInfo *tcon;      /* primary mount */
index e8287f76484f13ca19c66761d4d611b48a07c8f9..e7ba48c61a7af36e79bfebcc61d0704ddff7b9cb 100644 (file)
@@ -110,8 +110,8 @@ enum protocolEnum {
  */
 
 struct TCP_Server_Info {
-       char server_Name[SERVER_NAME_LEN_WITH_NULL];    /* 15 chars + X'20'in 16th */
-       char unicode_server_Name[SERVER_NAME_LEN_WITH_NULL * 2];        /* Unicode version of server_Name */
+       char server_Name[SERVER_NAME_LEN_WITH_NULL]; /* 15 chars + X'20' 16th */
+       char unicode_server_Name[SERVER_NAME_LEN_WITH_NULL * 2];
        struct socket *ssocket;
        union {
                struct sockaddr_in sockAddr;
@@ -231,6 +231,7 @@ struct cifsTconInfo {
        FILE_SYSTEM_ATTRIBUTE_INFO fsAttrInfo;  /* ok if file system name truncated */
        FILE_SYSTEM_UNIX_INFO fsUnixInfo;
        unsigned retry:1;
+       unsigned nocase:1;
        /* BB add field for back pointer to sb struct? */
 };
 
index 6b21f6aa9f609e4b2a8045f3e2e68d896e00289e..ac2c8bdc8e55a41812701c711e7b071bb0a48adc 100644 (file)
@@ -1048,6 +1048,11 @@ cifs_parse_mount_options(char *options, const char *devname,struct smb_vol *vol)
                        vol->nobrl =  0;
                } else if (strnicmp(data, "nobrl", 5) == 0) {
                        vol->nobrl =  1;
+                       /* turn off mandatory locking in mode
+                       if remote locking is turned off since the
+                       local vfs will do advisory */
+                       if(vol->file_mode == (S_IALLUGO & ~(S_ISUID | S_IXGRP)))
+                               vol->file_mode = S_IALLUGO;
                } else if (strnicmp(data, "setuids", 7) == 0) {
                        vol->setuids = 1;
                } else if (strnicmp(data, "nosetuids", 9) == 0) {
@@ -1707,8 +1712,6 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
                        cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_XATTR;
                if(volume_info.sfu_emul)
                        cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_UNX_EMUL;
-               if(volume_info.nocase)
-                       cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_CASE_INSENS;
                if(volume_info.nobrl)
                        cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_BRL;
 
@@ -1727,6 +1730,7 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
                           to the same server share the last value passed in 
                           for the retry flag is used */
                        tcon->retry = volume_info.retry;
+                       tcon->nocase = volume_info.nocase;
                } else {
                        tcon = tconInfoAlloc();
                        if (tcon == NULL)
@@ -1755,6 +1759,7 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
                                if (!rc) {
                                        atomic_inc(&pSesInfo->inUse);
                                        tcon->retry = volume_info.retry;
+                                       tcon->nocase = volume_info.nocase;
                                }
                        }
                }
index beeff82841696c63e0992b5ed5b9054b409486c3..40d50b77bfe753593ecd769fc43e68bb84e86d4c 100644 (file)
@@ -375,6 +375,8 @@ header_assemble(struct smb_hdr *buffer, char smb_command /* command */ ,
                }
                if (treeCon->Flags & SMB_SHARE_IS_IN_DFS)
                        buffer->Flags2 |= SMBFLG2_DFS;
+               if (treeCon->nocase)
+                       buffer->Flags  |= SMBFLG_CASELESS;
                if((treeCon->ses) && (treeCon->ses->server))
                        if(treeCon->ses->server->secMode & 
                          (SECMODE_SIGN_REQUIRED | SECMODE_SIGN_ENABLED))