return -EINVAL;
 }
 
+static inline void inc_rfc1001_len(void *pSMB, int count)
+{
+       struct smb_hdr *hdr = (struct smb_hdr *)pSMB;
+
+       be32_add_cpu(&hdr->smb_buf_length, count);
+}
+
 int
 CIFSSMBNegotiate(unsigned int xid, struct cifsSesInfo *ses)
 {
                count += strlen(protocols[i].name) + 1;
                /* null at end of source and target buffers anyway */
        }
-       pSMB->hdr.smb_buf_length += count;
+       inc_rfc1001_len(pSMB, count);
        pSMB->ByteCount = cpu_to_le16(count);
 
        rc = SendReceive(xid, ses, (struct smb_hdr *) pSMB,
        put_unaligned_le16(1, &smb->EchoCount);
        put_bcc_le(1, &smb->hdr);
        smb->Data[0] = 'a';
-       smb->hdr.smb_buf_length += 3;
+       inc_rfc1001_len(smb, 3);
 
        rc = cifs_call_async(server, (struct smb_hdr *)smb,
                                cifs_echo_callback, server);
        pSMB->TotalParameterCount = pSMB->ParameterCount;
        pSMB->InformationLevel = cpu_to_le16(SMB_POSIX_UNLINK);
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        pSMB->SearchAttributes =
            cpu_to_le16(ATTR_READONLY | ATTR_HIDDEN | ATTR_SYSTEM);
        pSMB->BufferFormat = 0x04;
-       pSMB->hdr.smb_buf_length += name_len + 1;
+       inc_rfc1001_len(pSMB, name_len + 1);
        pSMB->ByteCount = cpu_to_le16(name_len + 1);
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        }
 
        pSMB->BufferFormat = 0x04;
-       pSMB->hdr.smb_buf_length += name_len + 1;
+       inc_rfc1001_len(pSMB, name_len + 1);
        pSMB->ByteCount = cpu_to_le16(name_len + 1);
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        }
 
        pSMB->BufferFormat = 0x04;
-       pSMB->hdr.smb_buf_length += name_len + 1;
+       inc_rfc1001_len(pSMB, name_len + 1);
        pSMB->ByteCount = cpu_to_le16(name_len + 1);
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        pSMB->TotalParameterCount = pSMB->ParameterCount;
        pSMB->InformationLevel = cpu_to_le16(SMB_POSIX_OPEN);
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        pSMB->Sattr = cpu_to_le16(ATTR_HIDDEN | ATTR_SYSTEM | ATTR_DIRECTORY);
        pSMB->OpenFunction = cpu_to_le16(convert_disposition(openDisposition));
        count += name_len;
-       pSMB->hdr.smb_buf_length += count;
+       inc_rfc1001_len(pSMB, count);
 
        pSMB->ByteCount = cpu_to_le16(count);
        /* long_op set to 1 to allow for oplock break timeouts */
            SECURITY_CONTEXT_TRACKING | SECURITY_EFFECTIVE_ONLY;
 
        count += name_len;
-       pSMB->hdr.smb_buf_length += count;
+       inc_rfc1001_len(pSMB, count);
 
        pSMB->ByteCount = cpu_to_le16(count);
        /* long_op set to 1 to allow for oplock break timeouts */
        }
 
        iov[0].iov_base = (char *)pSMB;
-       iov[0].iov_len = pSMB->hdr.smb_buf_length + 4;
+       iov[0].iov_len = be32_to_cpu(pSMB->hdr.smb_buf_length) + 4;
        rc = SendReceive2(xid, tcon->ses, iov, 1 /* num iovecs */,
                         &resp_buf_type, CIFS_LOG_ERROR);
        cifs_stats_inc(&tcon->num_reads);
 
        pSMB->DataLengthLow = cpu_to_le16(bytes_sent & 0xFFFF);
        pSMB->DataLengthHigh = cpu_to_le16(bytes_sent >> 16);
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
 
        if (wct == 14)
                pSMB->ByteCount = cpu_to_le16(byte_count);
 
        pSMB->DataLengthLow = cpu_to_le16(count & 0xFFFF);
        pSMB->DataLengthHigh = cpu_to_le16(count >> 16);
-       smb_hdr_len = pSMB->hdr.smb_buf_length + 1; /* hdr + 1 byte pad */
+       /* header + 1 byte pad */
+       smb_hdr_len = be32_to_cpu(pSMB->hdr.smb_buf_length) + 1;
        if (wct == 14)
-               pSMB->hdr.smb_buf_length += count+1;
+               inc_rfc1001_len(pSMB, count + 1);
        else /* wct == 12 */
-               pSMB->hdr.smb_buf_length += count+5; /* smb data starts later */
+               inc_rfc1001_len(pSMB, count + 5); /* smb data starts later */
        if (wct == 14)
                pSMB->ByteCount = cpu_to_le16(count + 1);
        else /* wct == 12 */ /* bigger pad, smaller smb hdr, keep offset ok */ {
                /* oplock break */
                count = 0;
        }
-       pSMB->hdr.smb_buf_length += count;
+       inc_rfc1001_len(pSMB, count);
        pSMB->ByteCount = cpu_to_le16(count);
 
        if (waitFlag) {
        pSMB->Fid = smb_file_id;
        pSMB->InformationLevel = cpu_to_le16(SMB_SET_POSIX_LOCK);
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
        if (waitFlag) {
                rc = SendReceiveBlockingLock(xid, tcon, (struct smb_hdr *) pSMB,
                        (struct smb_hdr *) pSMBr, &bytes_returned);
        } else {
                iov[0].iov_base = (char *)pSMB;
-               iov[0].iov_len = pSMB->hdr.smb_buf_length + 4;
+               iov[0].iov_len = be32_to_cpu(pSMB->hdr.smb_buf_length) + 4;
                rc = SendReceive2(xid, tcon->ses, iov, 1 /* num iovecs */,
                                &resp_buf_type, timeout);
                pSMB = NULL; /* request buf already freed by SendReceive2. Do
        }
 
        count = 1 /* 1st signature byte */  + name_len + name_len2;
-       pSMB->hdr.smb_buf_length += count;
+       inc_rfc1001_len(pSMB, count);
        pSMB->ByteCount = cpu_to_le16(count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
        pSMB->InformationLevel =
                cpu_to_le16(SMB_SET_FILE_RENAME_INFORMATION);
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
        rc = SendReceive(xid, pTcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        }
 
        count = 1 /* 1st signature byte */  + name_len + name_len2;
-       pSMB->hdr.smb_buf_length += count;
+       inc_rfc1001_len(pSMB, count);
        pSMB->ByteCount = cpu_to_le16(count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
        pSMB->DataOffset = cpu_to_le16(offset);
        pSMB->InformationLevel = cpu_to_le16(SMB_SET_FILE_UNIX_LINK);
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        pSMB->DataOffset = cpu_to_le16(offset);
        pSMB->InformationLevel = cpu_to_le16(SMB_SET_FILE_UNIX_HLINK);
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        }
 
        count = 1 /* string type byte */  + name_len + name_len2;
-       pSMB->hdr.smb_buf_length += count;
+       inc_rfc1001_len(pSMB, count);
        pSMB->ByteCount = cpu_to_le16(count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
        pSMB->ParameterCount = pSMB->TotalParameterCount;
        pSMB->InformationLevel = cpu_to_le16(SMB_QUERY_FILE_UNIX_LINK);
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
        pSMB->ParameterCount = pSMB->TotalParameterCount;
        pSMB->InformationLevel = cpu_to_le16(SMB_QUERY_POSIX_ACL);
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
        pSMB->ParameterCount = cpu_to_le16(params);
        pSMB->TotalParameterCount = pSMB->ParameterCount;
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        pSMB->InformationLevel = cpu_to_le16(SMB_QUERY_ATTR_FLAGS);
        pSMB->Pad = 0;
        pSMB->Fid = netfid;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->t2.ByteCount = cpu_to_le16(byte_count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
        pSMB->AclFlags = cpu_to_le32(CIFS_ACL_OWNER | CIFS_ACL_GROUP |
                                     CIFS_ACL_DACL);
        pSMB->ByteCount = cpu_to_le16(11); /* 3 bytes pad + 8 bytes parm */
-       pSMB->hdr.smb_buf_length += 11;
+       inc_rfc1001_len(pSMB, 11);
        iov[0].iov_base = (char *)pSMB;
-       iov[0].iov_len = pSMB->hdr.smb_buf_length + 4;
+       iov[0].iov_len = be32_to_cpu(pSMB->hdr.smb_buf_length) + 4;
 
        rc = SendReceive2(xid, tcon->ses, iov, 1 /* num iovec */, &buf_type,
                         0);
                memcpy((char *) &pSMBr->hdr.Protocol + data_offset,
                        (char *) pntsd,
                        acllen);
-               pSMB->hdr.smb_buf_length += (byte_count + data_count);
-
+               inc_rfc1001_len(pSMB, byte_count + data_count);
        } else
-               pSMB->hdr.smb_buf_length += byte_count;
+               inc_rfc1001_len(pSMB, byte_count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        }
        pSMB->BufferFormat = 0x04;
        name_len++; /* account for buffer type byte */
-       pSMB->hdr.smb_buf_length += (__u16) name_len;
+       inc_rfc1001_len(pSMB, (__u16)name_len);
        pSMB->ByteCount = cpu_to_le16(name_len);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
        pSMB->InformationLevel = cpu_to_le16(SMB_QUERY_FILE_ALL_INFO);
        pSMB->Pad = 0;
        pSMB->Fid = netfid;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        else
                pSMB->InformationLevel = cpu_to_le16(SMB_QUERY_FILE_ALL_INFO);
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
        pSMB->InformationLevel = cpu_to_le16(SMB_QUERY_FILE_UNIX_BASIC);
        pSMB->Pad = 0;
        pSMB->Fid = netfid;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        pSMB->ParameterCount = pSMB->TotalParameterCount;
        pSMB->InformationLevel = cpu_to_le16(SMB_QUERY_FILE_UNIX_BASIC);
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
 
        /* BB what should we set StorageType to? Does it matter? BB */
        pSMB->SearchStorageType = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
        byte_count = params + 1 /* pad */ ;
        pSMB->TotalParameterCount = cpu_to_le16(params);
        pSMB->ParameterCount = pSMB->TotalParameterCount;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
        pSMB->ParameterCount = pSMB->TotalParameterCount;
        pSMB->InformationLevel = cpu_to_le16(SMB_QUERY_FILE_INTERNAL_INFO);
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
        pSMB->ParameterCount = cpu_to_le16(params);
        pSMB->TotalParameterCount = pSMB->ParameterCount;
        pSMB->MaxReferralLevel = cpu_to_le16(3);
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
 
        rc = SendReceive(xid, ses, (struct smb_hdr *) pSMB,
        pSMB->Reserved3 = 0;
        pSMB->SubCommand = cpu_to_le16(TRANS2_QUERY_FS_INFORMATION);
        pSMB->InformationLevel = cpu_to_le16(SMB_INFO_ALLOCATION);
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
        pSMB->Reserved3 = 0;
        pSMB->SubCommand = cpu_to_le16(TRANS2_QUERY_FS_INFORMATION);
        pSMB->InformationLevel = cpu_to_le16(SMB_QUERY_FS_SIZE_INFO);
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
        pSMB->Reserved3 = 0;
        pSMB->SubCommand = cpu_to_le16(TRANS2_QUERY_FS_INFORMATION);
        pSMB->InformationLevel = cpu_to_le16(SMB_QUERY_FS_ATTRIBUTE_INFO);
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
        pSMB->Reserved3 = 0;
        pSMB->SubCommand = cpu_to_le16(TRANS2_QUERY_FS_INFORMATION);
        pSMB->InformationLevel = cpu_to_le16(SMB_QUERY_FS_DEVICE_INFO);
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
        pSMB->Reserved3 = 0;
        pSMB->SubCommand = cpu_to_le16(TRANS2_QUERY_FS_INFORMATION);
        pSMB->InformationLevel = cpu_to_le16(SMB_QUERY_CIFS_UNIX_INFO);
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
        pSMB->ClientUnixMinor = cpu_to_le16(CIFS_UNIX_MINOR_VERSION);
        pSMB->ClientUnixCap = cpu_to_le64(cap);
 
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
        pSMB->Reserved3 = 0;
        pSMB->SubCommand = cpu_to_le16(TRANS2_QUERY_FS_INFORMATION);
        pSMB->InformationLevel = cpu_to_le16(SMB_QUERY_POSIX_FS_INFO);
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
        pSMB->ParameterCount = cpu_to_le16(params);
        pSMB->TotalParameterCount = pSMB->ParameterCount;
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        parm_data->FileSize = cpu_to_le64(size);
        pSMB->ByteCount = cpu_to_le16(byte_count);
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                                cpu_to_le16(SMB_SET_FILE_END_OF_FILE_INFO);
        }
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
        rc = SendReceiveNoRsp(xid, tcon->ses, (struct smb_hdr *) pSMB, 0);
        if (rc) {
        else
                pSMB->InformationLevel = cpu_to_le16(SMB_SET_FILE_BASIC_INFO);
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
        memcpy(data_offset, data, sizeof(FILE_BASIC_INFO));
        rc = SendReceiveNoRsp(xid, tcon->ses, (struct smb_hdr *) pSMB, 0);
        pSMB->Fid = fid;
        pSMB->InformationLevel = cpu_to_le16(SMB_SET_FILE_DISPOSITION_INFO);
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
        *data_offset = delete_file ? 1 : 0;
        rc = SendReceiveNoRsp(xid, tcon->ses, (struct smb_hdr *) pSMB, 0);
        else
                pSMB->InformationLevel = cpu_to_le16(SMB_SET_FILE_BASIC_INFO);
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        memcpy(data_offset, data, sizeof(FILE_BASIC_INFO));
        pSMB->ByteCount = cpu_to_le16(byte_count);
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
        }
        pSMB->attr = cpu_to_le16(dos_attrs);
        pSMB->BufferFormat = 0x04;
-       pSMB->hdr.smb_buf_length += name_len + 1;
+       inc_rfc1001_len(pSMB, name_len + 1);
        pSMB->ByteCount = cpu_to_le16(name_len + 1);
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
        pSMB->Fid = fid;
        pSMB->InformationLevel = cpu_to_le16(SMB_SET_FILE_UNIX_BASIC);
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
 
        cifs_fill_unix_set_info(data_offset, args);
        pSMB->TotalDataCount = pSMB->DataCount;
        pSMB->InformationLevel = cpu_to_le16(SMB_SET_FILE_UNIX_BASIC);
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
 
        cifs_fill_unix_set_info(data_offset, args);
 
        pSMB->ParameterCount = pSMB->TotalParameterCount;
        pSMB->InformationLevel = cpu_to_le16(SMB_INFO_QUERY_ALL_EAS);
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
 
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
        pSMB->ParameterCount = cpu_to_le16(params);
        pSMB->TotalParameterCount = pSMB->ParameterCount;
        pSMB->Reserved4 = 0;
-       pSMB->hdr.smb_buf_length += byte_count;
+       inc_rfc1001_len(pSMB, byte_count);
        pSMB->ByteCount = cpu_to_le16(byte_count);
        rc = SendReceive(xid, tcon->ses, (struct smb_hdr *) pSMB,
                         (struct smb_hdr *) pSMBr, &bytes_returned, 0);
 
        unsigned int len = iov[0].iov_len;
        unsigned int total_len;
        int first_vec = 0;
-       unsigned int smb_buf_length = smb_buffer->smb_buf_length;
+       unsigned int smb_buf_length = be32_to_cpu(smb_buffer->smb_buf_length);
        struct socket *ssocket = server->ssocket;
 
        if (ssocket == NULL)
        else
                smb_msg.msg_flags = MSG_NOSIGNAL;
 
-       /* smb header is converted in header_assemble. bcc and rest of SMB word
-          area, and byte area if necessary, is converted to littleendian in
-          cifssmb.c and RFC1001 len is converted to bigendian in smb_send
-          Flags2 is converted in SendReceive */
-
-
        total_len = 0;
        for (i = 0; i < n_vec; i++)
                total_len += iov[i].iov_len;
 
-       smb_buffer->smb_buf_length = cpu_to_be32(smb_buffer->smb_buf_length);
        cFYI(1, "Sending smb:  total_len %d", total_len);
        dump_smb(smb_buffer, len);
 
 
        /* Don't want to modify the buffer as a
           side effect of this call. */
-       smb_buffer->smb_buf_length = smb_buf_length;
+       smb_buffer->smb_buf_length = cpu_to_be32(smb_buf_length);
 
        return rc;
 }
 #ifdef CONFIG_CIFS_STATS2
        atomic_inc(&server->inSend);
 #endif
-       rc = smb_send(server, in_buf, in_buf->smb_buf_length);
+       rc = smb_send(server, in_buf, be32_to_cpu(in_buf->smb_buf_length));
 #ifdef CONFIG_CIFS_STATS2
        atomic_dec(&server->inSend);
        mid->when_sent = jiffies;
        int resp_buf_type;
 
        iov[0].iov_base = (char *)in_buf;
-       iov[0].iov_len = in_buf->smb_buf_length + 4;
+       iov[0].iov_len = be32_to_cpu(in_buf->smb_buf_length) + 4;
        flags |= CIFS_NO_RESP;
        rc = SendReceive2(xid, ses, iov, 1, &resp_buf_type, flags);
        cFYI(DBG2, "SendRcvNoRsp flags %d rc %d", flags, rc);
        int rc = 0;
 
        /* -4 for RFC1001 length and +2 for BCC field */
-       in_buf->smb_buf_length = sizeof(struct smb_hdr) - 4  + 2;
+       in_buf->smb_buf_length = cpu_to_be32(sizeof(struct smb_hdr) - 4  + 2);
        in_buf->Command = SMB_COM_NT_CANCEL;
        in_buf->WordCount = 0;
        put_bcc_le(0, in_buf);
                mutex_unlock(&server->srv_mutex);
                return rc;
        }
-       rc = smb_send(server, in_buf, in_buf->smb_buf_length);
+       rc = smb_send(server, in_buf, be32_to_cpu(in_buf->smb_buf_length));
        mutex_unlock(&server->srv_mutex);
 
        cFYI(1, "issued NT_CANCEL for mid %u, rc = %d",
                return rc;
        }
 
-       receive_len = midQ->resp_buf->smb_buf_length;
+       receive_len = be32_to_cpu(midQ->resp_buf->smb_buf_length);
 
        if (receive_len > CIFSMaxBufSize + MAX_CIFS_HDR_SIZE) {
                cERROR(1, "Frame too large received.  Length: %d  Xid: %d",
           to the same server. We may make this configurable later or
           use ses->maxReq */
 
-       if (in_buf->smb_buf_length > CIFSMaxBufSize + MAX_CIFS_HDR_SIZE - 4) {
+       if (be32_to_cpu(in_buf->smb_buf_length) > CIFSMaxBufSize +
+                       MAX_CIFS_HDR_SIZE - 4) {
                cERROR(1, "Illegal length, greater than maximum frame, %d",
-                          in_buf->smb_buf_length);
+                          be32_to_cpu(in_buf->smb_buf_length));
                return -EIO;
        }
 
 #ifdef CONFIG_CIFS_STATS2
        atomic_inc(&ses->server->inSend);
 #endif
-       rc = smb_send(ses->server, in_buf, in_buf->smb_buf_length);
+       rc = smb_send(ses->server, in_buf, be32_to_cpu(in_buf->smb_buf_length));
 #ifdef CONFIG_CIFS_STATS2
        atomic_dec(&ses->server->inSend);
        midQ->when_sent = jiffies;
                return rc;
        }
 
-       receive_len = midQ->resp_buf->smb_buf_length;
+       receive_len = be32_to_cpu(midQ->resp_buf->smb_buf_length);
 
        if (receive_len > CIFSMaxBufSize + MAX_CIFS_HDR_SIZE) {
                cERROR(1, "Frame too large received.  Length: %d  Xid: %d",
 
        if (midQ->resp_buf && out_buf
            && (midQ->midState == MID_RESPONSE_RECEIVED)) {
-               out_buf->smb_buf_length = receive_len;
+               out_buf->smb_buf_length = cpu_to_be32(receive_len);
                memcpy((char *)out_buf + 4,
                       (char *)midQ->resp_buf + 4,
                       receive_len);
                        }
                }
 
-               *pbytes_returned = out_buf->smb_buf_length;
+               *pbytes_returned = be32_to_cpu(out_buf->smb_buf_length);
 
                /* BB special case reconnect tid and uid here? */
                rc = map_smb_to_linux_error(out_buf, 0 /* no log */ );
           to the same server. We may make this configurable later or
           use ses->maxReq */
 
-       if (in_buf->smb_buf_length > CIFSMaxBufSize + MAX_CIFS_HDR_SIZE - 4) {
+       if (be32_to_cpu(in_buf->smb_buf_length) > CIFSMaxBufSize +
+                       MAX_CIFS_HDR_SIZE - 4) {
                cERROR(1, "Illegal length, greater than maximum frame, %d",
-                          in_buf->smb_buf_length);
+                          be32_to_cpu(in_buf->smb_buf_length));
                return -EIO;
        }
 
 #ifdef CONFIG_CIFS_STATS2
        atomic_inc(&ses->server->inSend);
 #endif
-       rc = smb_send(ses->server, in_buf, in_buf->smb_buf_length);
+       rc = smb_send(ses->server, in_buf, be32_to_cpu(in_buf->smb_buf_length));
 #ifdef CONFIG_CIFS_STATS2
        atomic_dec(&ses->server->inSend);
        midQ->when_sent = jiffies;
        if (rc != 0)
                return rc;
 
-       receive_len = midQ->resp_buf->smb_buf_length;
+       receive_len = be32_to_cpu(midQ->resp_buf->smb_buf_length);
        if (receive_len > CIFSMaxBufSize + MAX_CIFS_HDR_SIZE) {
                cERROR(1, "Frame too large received.  Length: %d  Xid: %d",
                        receive_len, xid);
                goto out;
        }
 
-       out_buf->smb_buf_length = receive_len;
+       out_buf->smb_buf_length = cpu_to_be32(receive_len);
        memcpy((char *)out_buf + 4,
               (char *)midQ->resp_buf + 4,
               receive_len);
                }
        }
 
-       *pbytes_returned = out_buf->smb_buf_length;
+       *pbytes_returned = be32_to_cpu(out_buf->smb_buf_length);
 
        /* BB special case reconnect tid and uid here? */
        rc = map_smb_to_linux_error(out_buf, 0 /* no log */ );