]> err.no Git - linux-2.6/commitdiff
[CIFS] Add support for legacy servers part seven. Fix open for write,
authorSteve French <sfrench@us.ibm.com>
Mon, 19 Sep 2005 03:49:21 +0000 (20:49 -0700)
committerSteve French <sfrench@us.ibm.com>
Mon, 19 Sep 2005 03:49:21 +0000 (20:49 -0700)
begin implementation of Win9x style set file size via open then
write of zero bytes.

Signed-off-by: Steve French (sfrench@us.ibm.com)
fs/cifs/cifssmb.c
fs/cifs/inode.c

index b8830118f09a0f755e1d733553c06be842ac43b8..575b2281518d5942223cfd65d5e952f356663782 100644 (file)
@@ -766,7 +766,7 @@ OldOpenRetry:
         if(create_options & CREATE_OPTION_SPECIAL)
                 pSMB->FileAttributes = cpu_to_le16(ATTR_SYSTEM);
         else
-                pSMB->FileAttributes = cpu_to_le16(ATTR_NORMAL);
+                pSMB->FileAttributes = cpu_to_le16(0/*ATTR_NORMAL*/); /* BB FIXME */
 
        /* if ((omode & S_IWUGO) == 0)
                pSMB->FileAttributes |= cpu_to_le32(ATTR_READONLY);*/
@@ -777,6 +777,8 @@ OldOpenRetry:
        /* BB FIXME BB */
 /*     pSMB->CreateOptions = cpu_to_le32(create_options & CREATE_OPTIONS_MASK); */
        /* BB FIXME END BB */
+
+       pSMB->Sattr = cpu_to_le16(ATTR_HIDDEN | ATTR_SYSTEM | ATTR_DIRECTORY);
        pSMB->OpenFunction = convert_disposition(openDisposition);
        count += name_len;
        pSMB->hdr.smb_buf_length += count;
@@ -3689,7 +3691,7 @@ SetEOFRetry:
                                     PATH_MAX, nls_codepage, remap);
                name_len++;     /* trailing null */
                name_len *= 2;
-       } else {                /* BB improve the check for buffer overruns BB */
+       } else {        /* BB improve the check for buffer overruns BB */
                name_len = strnlen(fileName, PATH_MAX);
                name_len++;     /* trailing null */
                strncpy(pSMB->FileName, fileName, name_len);
@@ -3697,7 +3699,7 @@ SetEOFRetry:
        params = 6 + name_len;
        data_count = sizeof (struct file_end_of_file_info);
        pSMB->MaxParameterCount = cpu_to_le16(2);
-       pSMB->MaxDataCount = cpu_to_le16(1000); /* BB find max SMB size from sess */
+       pSMB->MaxDataCount = cpu_to_le16(4100);
        pSMB->MaxSetupCount = 0;
        pSMB->Reserved = 0;
        pSMB->Flags = 0;
@@ -4079,7 +4081,7 @@ setPermsRetry:
                                     PATH_MAX, nls_codepage, remap);
                name_len++;     /* trailing null */
                name_len *= 2;
-       } else {                /* BB improve the check for buffer overruns BB */
+       } else {        /* BB improve the check for buffer overruns BB */
                name_len = strnlen(fileName, PATH_MAX);
                name_len++;     /* trailing null */
                strncpy(pSMB->FileName, fileName, name_len);
index 0fbe02ebc0335498bdc648287358e900662a8a87..6e82e1ae03b492fcbf19de65b611139a5ec8fe55 100644 (file)
@@ -1030,6 +1030,14 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs)
                                        /* now that we found one valid file
                                           handle no sense continuing to loop
                                           trying others, so break here */
+                                       /* if(rc == -EINVAL) {
+                                               int bytes_written;
+                                               rc = CIFSSMBWrite(xid, pTcon,
+                                                       nfid, 0,
+                                                       attrs->ia_size, 
+                                                       &bytes_written,
+                                                       NULL, NULL, long_op);
+                                       } */
                                        break;
                                }
                        }
@@ -1048,6 +1056,13 @@ int cifs_setattr(struct dentry *direntry, struct iattr *attrs)
                                           cifs_sb->mnt_cifs_flags &
                                                CIFS_MOUNT_MAP_SPECIAL_CHR);
                        cFYI(1, (" SetEOF by path (setattrs) rc = %d", rc));
+                       /* if(rc == -EINVAL)
+                               old_style_set_eof_via_write(xid, pTcon, 
+                                               full_path, 
+                                               attrs->ia_size,
+                                               cifs_sb->local_nls,
+                                               cifs_sb->mnt_cifs_flags &
+                                                 CIFS_MOUNT_MAP_SPECIAL_CHR);*/
                }
 
                /* Server is ok setting allocation size implicitly - no need