Commit 3e87d803 authored by Steve French's avatar Steve French
Browse files

[CIFS] Add support for legacy servers part seven. Fix open for write,


begin implementation of Win9x style set file size via open then
write of zero bytes.

Signed-off-by: default avatarSteve French <(sfrench@us.ibm.com)>
parent f9f5c817
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -766,7 +766,7 @@ SMBLegacyOpen(const int xid, struct cifsTconInfo *tcon,
        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 @@ SMBLegacyOpen(const int xid, struct cifsTconInfo *tcon,
	/* 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;
@@ -3697,7 +3699,7 @@ CIFSSMBSetEOF(const int xid, struct cifsTconInfo *tcon, const char *fileName,
	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;
+15 −0
Original line number Diff line number Diff line
@@ -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