if ((pSMBr->hdr.Flags2 & SMBFLG2_EXT_SEC) &&
                (server->capabilities & CAP_EXTENDED_SECURITY)) {
-               count = pSMBr->ByteCount;
+               count = get_bcc(&pSMBr->hdr);
                if (count < 16) {
                        rc = -EIO;
                        goto neg_err_exit;
        smb->hdr.Tid = 0xffff;
        smb->hdr.WordCount = 1;
        put_unaligned_le16(1, &smb->EchoCount);
-       put_bcc_le(1, &smb->hdr);
+       put_bcc(1, &smb->hdr);
        smb->Data[0] = 'a';
        inc_rfc1001_len(smb, 3);
 
        cFYI(1, "copying inode info");
        rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
-       if (rc || (pSMBr->ByteCount < sizeof(OPEN_PSX_RSP))) {
+       if (rc || get_bcc(&pSMBr->hdr) < sizeof(OPEN_PSX_RSP)) {
                rc = -EIO;      /* bad smb */
                goto psx_create_err;
        }
                pRetData->Type = cpu_to_le32(-1); /* unknown */
                cFYI(DBG2, "unknown type");
        } else {
-               if (pSMBr->ByteCount < sizeof(OPEN_PSX_RSP)
+               if (get_bcc(&pSMBr->hdr) < sizeof(OPEN_PSX_RSP)
                                        + sizeof(FILE_UNIX_BASIC_INFO)) {
                        cERROR(1, "Open response data too small");
                        pRetData->Type = cpu_to_le32(-1);
                __u16 data_count;
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
-               if (rc || (pSMBr->ByteCount < sizeof(struct cifs_posix_lock))) {
+               if (rc || get_bcc(&pSMBr->hdr) < sizeof(*parm_data)) {
                        rc = -EIO;      /* bad smb */
                        goto plk_err_exit;
                }
 
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
                /* BB also check enough total bytes returned */
-               if (rc || (pSMBr->ByteCount < 2))
+               if (rc || get_bcc(&pSMBr->hdr) < 2)
                        rc = -EIO;
                else {
                        bool is_unicode;
        } else {                /* decode response */
                __u32 data_offset = le32_to_cpu(pSMBr->DataOffset);
                __u32 data_count = le32_to_cpu(pSMBr->DataCount);
-               if ((pSMBr->ByteCount < 2) || (data_offset > 512)) {
-               /* BB also check enough total bytes returned */
+               if (get_bcc(&pSMBr->hdr) < 2 || data_offset > 512) {
+                       /* BB also check enough total bytes returned */
                        rc = -EIO;      /* bad smb */
                        goto qreparse_out;
                }
                if (data_count && (data_count < 2048)) {
                        char *end_of_smb = 2 /* sizeof byte count */ +
-                               pSMBr->ByteCount + (char *)&pSMBr->ByteCount;
+                              get_bcc(&pSMBr->hdr) + (char *)&pSMBr->ByteCount;
 
                        struct reparse_data *reparse_buf =
                                                (struct reparse_data *)
                /* decode response */
 
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
-               if (rc || (pSMBr->ByteCount < 2))
                /* BB also check enough total bytes returned */
+               if (rc || get_bcc(&pSMBr->hdr) < 2)
                        rc = -EIO;      /* bad smb */
                else {
                        __u16 data_offset = le16_to_cpu(pSMBr->t2.DataOffset);
        } else {
                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
-               if (rc || (pSMBr->ByteCount < 2))
                /* BB also check enough total bytes returned */
+               if (rc || get_bcc(&pSMBr->hdr) < 2)
                        /* If rc should we check for EOPNOSUPP and
                           disable the srvino flag? or in caller? */
                        rc = -EIO;      /* bad smb */
        char *end_of_smb;
        __u32 data_count, data_offset, parm_count, parm_offset;
        struct smb_com_ntransact_rsp *pSMBr;
+       u16 bcc;
 
        *pdatalen = 0;
        *pparmlen = 0;
 
        pSMBr = (struct smb_com_ntransact_rsp *)buf;
 
-       /* ByteCount was converted from little endian in SendReceive */
-       end_of_smb = 2 /* sizeof byte count */ + pSMBr->ByteCount +
+       bcc = get_bcc(&pSMBr->hdr);
+       end_of_smb = 2 /* sizeof byte count */ + bcc +
                        (char *)&pSMBr->ByteCount;
 
        data_offset = le32_to_cpu(pSMBr->DataOffset);
                        *ppdata, data_count, (data_count + *ppdata),
                        end_of_smb, pSMBr);
                return -EINVAL;
-       } else if (parm_count + data_count > pSMBr->ByteCount) {
+       } else if (parm_count + data_count > bcc) {
                cFYI(1, "parm count and data count larger than SMB");
                return -EINVAL;
        }
 
                if (rc) /* BB add auto retry on EOPNOTSUPP? */
                        rc = -EIO;
-               else if (pSMBr->ByteCount < 40)
+               else if (get_bcc(&pSMBr->hdr) < 40)
                        rc = -EIO;      /* bad smb */
                else if (pFindData) {
                        __u16 data_offset = le16_to_cpu(pSMBr->t2.DataOffset);
 
                if (rc) /* BB add auto retry on EOPNOTSUPP? */
                        rc = -EIO;
-               else if (!legacy && (pSMBr->ByteCount < 40))
+               else if (!legacy && get_bcc(&pSMBr->hdr) < 40)
                        rc = -EIO;      /* bad smb */
-               else if (legacy && (pSMBr->ByteCount < 24))
+               else if (legacy && get_bcc(&pSMBr->hdr) < 24)
                        rc = -EIO;  /* 24 or 26 expected but we do not read
                                        last field */
                else if (pFindData) {
        } else {                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
-               if (rc || (pSMBr->ByteCount < sizeof(FILE_UNIX_BASIC_INFO))) {
+               if (rc || get_bcc(&pSMBr->hdr) < sizeof(FILE_UNIX_BASIC_INFO)) {
                        cERROR(1, "Malformed FILE_UNIX_BASIC_INFO response.\n"
                                   "Unix Extensions can be disabled on mount "
                                   "by specifying the nosfu mount option.");
        } else {                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
-               if (rc || (pSMBr->ByteCount < sizeof(FILE_UNIX_BASIC_INFO))) {
+               if (rc || get_bcc(&pSMBr->hdr) < sizeof(FILE_UNIX_BASIC_INFO)) {
                        cERROR(1, "Malformed FILE_UNIX_BASIC_INFO response.\n"
                                   "Unix Extensions can be disabled on mount "
                                   "by specifying the nosfu mount option.");
        } else {
                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
-               if (rc || (pSMBr->ByteCount < 2))
                /* BB also check enough total bytes returned */
+               if (rc || get_bcc(&pSMBr->hdr) < 2)
                        /* If rc should we check for EOPNOSUPP and
                        disable the srvino flag? or in caller? */
                        rc = -EIO;      /* bad smb */
        rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
        /* BB Also check if enough total bytes returned? */
-       if (rc || (pSMBr->ByteCount < 17)) {
+       if (rc || get_bcc(&pSMBr->hdr) < 17) {
                rc = -EIO;      /* bad smb */
                goto GetDFSRefExit;
        }
 
        cFYI(1, "Decoding GetDFSRefer response BCC: %d  Offset %d",
-                               pSMBr->ByteCount,
+                               get_bcc(&pSMBr->hdr),
                                le16_to_cpu(pSMBr->t2.DataOffset));
 
        /* parse returned result into more usable form */
        } else {                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
-               if (rc || (pSMBr->ByteCount < 18))
+               if (rc || get_bcc(&pSMBr->hdr) < 18)
                        rc = -EIO;      /* bad smb */
                else {
                        __u16 data_offset = le16_to_cpu(pSMBr->t2.DataOffset);
                        cFYI(1, "qfsinf resp BCC: %d  Offset %d",
-                                pSMBr->ByteCount, data_offset);
+                                get_bcc(&pSMBr->hdr), data_offset);
 
                        response_data = (FILE_SYSTEM_ALLOC_INFO *)
                                (((char *) &pSMBr->hdr.Protocol) + data_offset);
        } else {                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
-               if (rc || (pSMBr->ByteCount < 24))
+               if (rc || get_bcc(&pSMBr->hdr) < 24)
                        rc = -EIO;      /* bad smb */
                else {
                        __u16 data_offset = le16_to_cpu(pSMBr->t2.DataOffset);
        } else {                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
-               if (rc || (pSMBr->ByteCount < 13)) {
+               if (rc || get_bcc(&pSMBr->hdr) < 13) {
                        /* BB also check if enough bytes returned */
                        rc = -EIO;      /* bad smb */
                } else {
        } else {                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
-               if (rc || (pSMBr->ByteCount < sizeof(FILE_SYSTEM_DEVICE_INFO)))
+               if (rc || get_bcc(&pSMBr->hdr) <
+                         sizeof(FILE_SYSTEM_DEVICE_INFO))
                        rc = -EIO;      /* bad smb */
                else {
                        __u16 data_offset = le16_to_cpu(pSMBr->t2.DataOffset);
        } else {                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
-               if (rc || (pSMBr->ByteCount < 13)) {
+               if (rc || get_bcc(&pSMBr->hdr) < 13) {
                        rc = -EIO;      /* bad smb */
                } else {
                        __u16 data_offset = le16_to_cpu(pSMBr->t2.DataOffset);
        } else {                /* decode response */
                rc = validate_t2((struct smb_t2_rsp *)pSMBr);
 
-               if (rc || (pSMBr->ByteCount < 13)) {
+               if (rc || get_bcc(&pSMBr->hdr) < 13) {
                        rc = -EIO;      /* bad smb */
                } else {
                        __u16 data_offset = le16_to_cpu(pSMBr->t2.DataOffset);
        of these trans2 responses */
 
        rc = validate_t2((struct smb_t2_rsp *)pSMBr);
-       if (rc || (pSMBr->ByteCount < 4)) {
+       if (rc || get_bcc(&pSMBr->hdr) < 4) {
                rc = -EIO;      /* bad smb */
                goto QAllEAsOut;
        }
 
        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);
+       put_bcc(0, in_buf);
 
        mutex_lock(&server->srv_mutex);
        rc = cifs_sign_smb(in_buf, server, &mid->sequence_number);
                rc = map_smb_to_linux_error(midQ->resp_buf,
                                            flags & CIFS_LOG_ERROR);
 
-               /* convert ByteCount if necessary */
-               if (receive_len >= sizeof(struct smb_hdr) - 4
-                   /* do not count RFC1001 header */  +
-                   (2 * midQ->resp_buf->WordCount) + 2 /* bcc */ )
-                       put_bcc(get_bcc_le(midQ->resp_buf), midQ->resp_buf);
                if ((flags & CIFS_NO_RESP) == 0)
                        midQ->resp_buf = NULL;  /* mark it so buf will
                                                   not be freed by
 
                /* BB special case reconnect tid and uid here? */
                rc = map_smb_to_linux_error(out_buf, 0 /* no log */ );
-
-               /* convert ByteCount if necessary */
-               if (receive_len >= sizeof(struct smb_hdr) - 4
-                   /* do not count RFC1001 header */  +
-                   (2 * out_buf->WordCount) + 2 /* bcc */ )
-                       put_bcc(get_bcc_le(midQ->resp_buf), midQ->resp_buf);
        } else {
                rc = -EIO;
                cERROR(1, "Bad MID state?");
        /* BB special case reconnect tid and uid here? */
        rc = map_smb_to_linux_error(out_buf, 0 /* no log */ );
 
-       /* convert ByteCount if necessary */
-       if (receive_len >= sizeof(struct smb_hdr) - 4
-           /* do not count RFC1001 header */  +
-           (2 * out_buf->WordCount) + 2 /* bcc */ )
-               put_bcc(get_bcc_le(out_buf), out_buf);
-
 out:
        delete_mid(midQ);
        if (rstart && rc == -EACCES)