On Thu, 17 May 2012 19:43:41 +0400
Pavel Shilovsky <[email protected]> wrote:

> Signed-off-by: Pavel Shilovsky <[email protected]>
> ---
>  fs/cifs/cifsglob.h |   17 +++++------------
>  fs/cifs/cifssmb.c  |    7 ++++---
>  fs/cifs/connect.c  |   17 +++++++++--------
>  fs/cifs/smb1ops.c  |    2 ++
>  4 files changed, 20 insertions(+), 23 deletions(-)
> 
> diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
> index ff06211..94657e2 100644
> --- a/fs/cifs/cifsglob.h
> +++ b/fs/cifs/cifsglob.h
> @@ -175,8 +175,13 @@ struct smb_version_values {
>       __u32           exclusive_lock_type;
>       __u32           shared_lock_type;
>       __u32           unlock_lock_type;
> +     size_t          header_size;
> +     size_t          max_header_size;
>  };
>  
> +#define HEADER_SIZE(server) (server->vals->header_size)
> +#define MAX_HEADER_SIZE(server) (server->vals->max_header_size)
> +
>  struct smb_vol {
>       char *username;
>       char *password;
> @@ -372,18 +377,6 @@ has_credits(struct TCP_Server_Info *server, int *credits)
>       return num > 0;
>  }
>  
> -static inline size_t
> -header_size(void)
> -{
> -     return sizeof(struct smb_hdr);
> -}
> -
> -static inline size_t
> -max_header_size(void)
> -{
> -     return MAX_CIFS_HDR_SIZE;
> -}
> -
>  /*
>   * Macros to allow the TCP_Server_Info->net field and related code to drop 
> out
>   * when CONFIG_NET_NS isn't set.
> diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c
> index 3563c93..77463f7 100644
> --- a/fs/cifs/cifssmb.c
> +++ b/fs/cifs/cifssmb.c
> @@ -1400,7 +1400,7 @@ cifs_readv_discard(struct TCP_Server_Info *server, 
> struct mid_q_entry *mid)
>  
>               length = cifs_read_from_socket(server, server->bigbuf,
>                               min_t(unsigned int, remaining,
> -                                     CIFSMaxBufSize + max_header_size()));
> +                                 CIFSMaxBufSize + MAX_HEADER_SIZE(server)));
>               if (length < 0)
>                       return length;
>               server->total_read += length;
> @@ -1449,9 +1449,10 @@ cifs_readv_receive(struct TCP_Server_Info *server, 
> struct mid_q_entry *mid)
>        * can if there's not enough data. At this point, we've read down to
>        * the Mid.
>        */
> -     len = min_t(unsigned int, buflen, read_rsp_size()) - header_size() + 1;
> +     len = min_t(unsigned int, buflen, read_rsp_size()) -
> +                                                     HEADER_SIZE(server) + 1;
>  
> -     rdata->iov[0].iov_base = buf + header_size() - 1;
> +     rdata->iov[0].iov_base = buf + HEADER_SIZE(server) - 1;
>       rdata->iov[0].iov_len = len;
>  
>       length = cifs_readv_from_socket(server, rdata->iov, 1, len);
> diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
> index 5ac20fc..65ec6ef 100644
> --- a/fs/cifs/connect.c
> +++ b/fs/cifs/connect.c
> @@ -568,7 +568,7 @@ allocate_buffers(struct TCP_Server_Info *server)
>               }
>       } else if (server->large_buf) {
>               /* we are reusing a dirty large buf, clear its start */
> -             memset(server->bigbuf, 0, header_size());
> +             memset(server->bigbuf, 0, HEADER_SIZE(server));
>       }
>  
>       if (!server->smallbuf) {
> @@ -582,7 +582,7 @@ allocate_buffers(struct TCP_Server_Info *server)
>               /* beginning of smb buffer is cleared in our buf_get */
>       } else {
>               /* if existing small buf clear beginning */
> -             memset(server->smallbuf, 0, header_size());
> +             memset(server->smallbuf, 0, HEADER_SIZE(server));
>       }
>  
>       return true;
> @@ -953,7 +953,7 @@ standard_receive3(struct TCP_Server_Info *server, struct 
> mid_q_entry *mid)
>       unsigned int pdu_length = get_rfc1002_length(buf);
>  
>       /* make sure this will fit in a large buffer */
> -     if (pdu_length > CIFSMaxBufSize + max_header_size() - 4) {
> +     if (pdu_length > CIFSMaxBufSize + MAX_HEADER_SIZE(server) - 4) {
>               cERROR(1, "SMB response too long (%u bytes)",
>                       pdu_length);
>               cifs_reconnect(server);
> @@ -969,8 +969,8 @@ standard_receive3(struct TCP_Server_Info *server, struct 
> mid_q_entry *mid)
>       }
>  
>       /* now read the rest */
> -     length = cifs_read_from_socket(server, buf + header_size() - 1,
> -                                    pdu_length - header_size() + 1 + 4);
> +     length = cifs_read_from_socket(server, buf + HEADER_SIZE(server) - 1,
> +                             pdu_length - HEADER_SIZE(server) + 1 + 4);
>       if (length < 0)
>               return length;
>       server->total_read += length;
> @@ -1044,7 +1044,7 @@ cifs_demultiplex_thread(void *p)
>                       continue;
>  
>               /* make sure we have enough to get to the MID */
> -             if (pdu_length < header_size() - 1 - 4) {
> +             if (pdu_length < HEADER_SIZE(server) - 1 - 4) {
>                       cERROR(1, "SMB response too short (%u bytes)",
>                               pdu_length);
>                       cifs_reconnect(server);
> @@ -1054,7 +1054,7 @@ cifs_demultiplex_thread(void *p)
>  
>               /* read down to the MID */
>               length = cifs_read_from_socket(server, buf + 4,
> -                                            header_size() - 1 - 4);
> +                                            HEADER_SIZE(server) - 1 - 4);
>               if (length < 0)
>                       continue;
>               server->total_read += length;
> @@ -1079,7 +1079,8 @@ cifs_demultiplex_thread(void *p)
>               } else if (!is_valid_oplock_break(buf, server)) {
>                       cERROR(1, "No task to wake, unknown frame received! "
>                                  "NumMids %d", atomic_read(&midCount));
> -                     cifs_dump_mem("Received Data is: ", buf, header_size());
> +                     cifs_dump_mem("Received Data is: ", buf,
> +                                   HEADER_SIZE(server));
>  #ifdef CONFIG_CIFS_DEBUG2
>                       cifs_dump_detail(buf);
>                       cifs_dump_mids(server);
> diff --git a/fs/cifs/smb1ops.c b/fs/cifs/smb1ops.c
> index 3b7cf89..5dc365f 100644
> --- a/fs/cifs/smb1ops.c
> +++ b/fs/cifs/smb1ops.c
> @@ -80,4 +80,6 @@ struct smb_version_values smb1_values = {
>       .exclusive_lock_type = 0,
>       .shared_lock_type = LOCKING_ANDX_SHARED_LOCK,
>       .unlock_lock_type = 0,
> +     .header_size = sizeof(struct smb_hdr),
> +     .max_header_size = MAX_CIFS_HDR_SIZE,
>  };

Reviewed-by: Jeff Layton <[email protected]>
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to