/*
* fs/cifs/misc.c
*
- * Copyright (C) International Business Machines Corp., 2002,2004
+ * Copyright (C) International Business Machines Corp., 2002,2003
* Author(s): Steve French (sfrench@us.ibm.com)
*
* This library is free software; you can redistribute it and/or modify
#include "smberr.h"
#include "nterr.h"
-extern mempool_t *cifs_sm_req_poolp;
extern mempool_t *cifs_req_poolp;
extern struct task_struct * oplockThread;
(struct smb_hdr *) mempool_alloc(cifs_req_poolp, SLAB_KERNEL | SLAB_NOFS);
/* clear the first few header bytes */
- /* for most paths, more is cleared in header_assemble */
if (ret_buf) {
- memset(ret_buf, 0, sizeof(struct smb_hdr) + 3);
+ memset(ret_buf, 0, sizeof (struct smb_hdr));
atomic_inc(&bufAllocCount);
}
{
if (buf_to_free == NULL) {
- /* cFYI(1, ("Null buffer passed to cifs_buf_release"));*/
+ cFYI(1, ("Null buffer passed to cifs_buf_release"));
return;
}
mempool_free(buf_to_free,cifs_req_poolp);
return;
}
-struct smb_hdr *
-cifs_small_buf_get(void)
-{
- struct smb_hdr *ret_buf = NULL;
-
-/* We could use negotiated size instead of max_msgsize -
- but it may be more efficient to always alloc same size
- albeit slightly larger than necessary and maxbuffersize
- defaults to this and can not be bigger */
- ret_buf =
- (struct smb_hdr *) mempool_alloc(cifs_sm_req_poolp, SLAB_KERNEL | SLAB_NOFS);
- if (ret_buf) {
- /* No need to clear memory here, cleared in header assemble */
- /* memset(ret_buf, 0, sizeof(struct smb_hdr) + 27);*/
- atomic_inc(&smBufAllocCount);
- }
- return ret_buf;
-}
-
-void
-cifs_small_buf_release(void *buf_to_free)
-{
-
- if (buf_to_free == NULL) {
- cFYI(1, ("Null buffer passed to cifs_small_buf_release"));
- return;
- }
- mempool_free(buf_to_free,cifs_sm_req_poolp);
-
- atomic_dec(&smBufAllocCount);
- return;
-}
-
void
header_assemble(struct smb_hdr *buffer, char smb_command /* command */ ,
const struct cifsTconInfo *treeCon, int word_count
- /* length of fixed section (word count) in two byte units */)
+ /* length of fixed section (word count) in two byte units */
+ )
{
+ int i;
struct list_head* temp_item;
struct cifsSesInfo * ses;
char *temp = (char *) buffer;
- memset(temp,0,MAX_CIFS_HDR_SIZE);
+ for (i = 0; i < MAX_CIFS_HDR_SIZE; i++) {
+ temp[i] = 0; /* BB is this needed ?? */
+ }
buffer->smb_buf_length =
(2 * word_count) + sizeof (struct smb_hdr) -
("Entering checkSMB with Length: %x, smb_buf_length: %x ",
length, len));
if (((unsigned int)length < 2 + sizeof (struct smb_hdr)) ||
- (len > CIFSMaxBufSize + MAX_CIFS_HDR_SIZE - 4)) {
+ (len > CIFS_MAX_MSGSIZE + MAX_CIFS_HDR_SIZE - 4)) {
if ((unsigned int)length < 2 + sizeof (struct smb_hdr)) {
cERROR(1, ("Length less than 2 + sizeof smb_hdr "));
if (((unsigned int)length >= sizeof (struct smb_hdr) - 1)
return 0; /* some error cases do not return wct and bcc */
}
- if (len > CIFSMaxBufSize + MAX_CIFS_HDR_SIZE - 4)
+ if (len > CIFS_MAX_MSGSIZE + MAX_CIFS_HDR_SIZE - 4)
cERROR(1,
- ("smb_buf_length greater than MaxBufSize"));
+ ("smb_buf_length greater than CIFS_MAX_MSGSIZE ... "));
cERROR(1,
("bad smb detected. Illegal length. The mid=%d",
smb->Mid));
struct cifsTconInfo *tcon;
struct cifsFileInfo *netfile;
- cFYI(1,("Checking for oplock break or dnotify response"));
- if((pSMB->hdr.Command == SMB_COM_NT_TRANSACT) &&
- (pSMB->hdr.Flags & SMBFLG_RESPONSE)) {
- struct smb_com_transaction_change_notify_rsp * pSMBr =
- (struct smb_com_transaction_change_notify_rsp *)buf;
- struct file_notify_information * pnotify;
- __u32 data_offset = 0;
- if(pSMBr->ByteCount > sizeof(struct file_notify_information)) {
- data_offset = le32_to_cpu(pSMBr->DataOffset);
-
- pnotify = (struct file_notify_information *)((char *)&pSMBr->hdr.Protocol
- + data_offset);
- cFYI(1,("dnotify on %s with action: 0x%x",pnotify->FileName,
- pnotify->Action)); /* BB removeme BB */
- /* cifs_dump_mem("Received notify Data is: ",buf,sizeof(struct smb_hdr)+60); */
- return TRUE;
- }
- if(pSMBr->hdr.Status.CifsError) {
- cFYI(1,("notify err 0x%d",pSMBr->hdr.Status.CifsError));
- return TRUE;
- }
- return FALSE;
- }
+ /* could add check for smb response flag 0x80 */
+ cFYI(1,("Checking for oplock break"));
if(pSMB->hdr.Command != SMB_COM_LOCKING_ANDX)
return FALSE;
if(pSMB->hdr.Flags & SMBFLG_RESPONSE) {