]> err.no Git - linux-2.6/commitdiff
CIFS: Allow wsize to exceed CIFSMaxBufSize
authorSteve French <sfrench@us.ibm.com>
Wed, 5 Oct 2005 22:14:33 +0000 (15:14 -0700)
committerSteve French <sfrench@us.ibm.com>
Wed, 5 Oct 2005 22:14:33 +0000 (15:14 -0700)
This allows cifs_writepages to send data in larger chunks from the page
cache, without requiring larger memory allocations in other cases.

Signed-off-by: Dave Kleikamp <shaggy@austin.ibm.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
fs/cifs/connect.c
fs/cifs/file.c
fs/cifs/transport.c

index f05d9e2016d5e6589c9873a45c2ae4ba6bad6782..31eb9a3bf6271274e0f02aec9230e79907728418 100644 (file)
@@ -1740,7 +1740,7 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
                        cifs_sb->rsize = volume_info.rsize;
                else
                        cifs_sb->rsize = srvTcp->maxBuf - MAX_CIFS_HDR_SIZE; /* default */
-               if((volume_info.wsize) && (volume_info.wsize <= CIFSMaxBufSize))
+               if(volume_info.wsize)
                        cifs_sb->wsize = volume_info.wsize;
                else
                        cifs_sb->wsize = CIFSMaxBufSize; /* default */
index 0473b221f6430756947b283a56aa0c70b48bf790..0f66ae5b694ba7ed451afacd8abbfe4dd51a8fde 100644 (file)
@@ -925,6 +925,7 @@ static struct cifsFileInfo *find_writable_file(struct cifsInodeInfo *cifs_inode)
                                /* if it fails, try another handle - might be */
                                /* dangerous to hold up writepages with retry */
                                if(rc) {
+                                       cFYI(1,("failed on reopen file in wp"));
                                        read_lock(&GlobalSMBSeslock);
                                        continue;
                                }
@@ -1028,6 +1029,13 @@ static int cifs_writepages(struct address_space *mapping,
        if (cifs_sb->wsize < PAGE_CACHE_SIZE)
                return generic_writepages(mapping, wbc);
 
+       /* BB FIXME we do not have code to sign across multiple buffers yet,
+          so go to older writepage style write which we can sign if needed */
+       if((cifs_sb->tcon->ses) && (cifs_sb->tcon->ses->server))
+               if(cifs_sb->tcon->ses->server->secMode &
+                          (SECMODE_SIGN_REQUIRED | SECMODE_SIGN_ENABLED))
+                       return generic_writepages(mapping, wbc);
+
        /*
         * BB: Is this meaningful for a non-block-device file system?
         * If it is, we should test it again after we do I/O
index e104c1ad2da3d285ef89b434164a207e10a20c61..c86b7077b92fff56497dfbfdb8483e6610f0488d 100644 (file)
@@ -361,22 +361,8 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses,
                return -ENOMEM;
        }
 
-       if (in_buf->smb_buf_length > CIFSMaxBufSize + MAX_CIFS_HDR_SIZE - 4) {
-               up(&ses->server->tcpSem);
-               cERROR(1,
-                      ("Illegal length, greater than maximum frame, %d ",
-                       in_buf->smb_buf_length));
-               DeleteMidQEntry(midQ);
-               /* If not lock req, update # of requests on wire to server */
-               if(long_op < 3) {
-                       atomic_dec(&ses->server->inFlight); 
-                       wake_up(&ses->server->request_q);
-               }
-               return -EIO;
-       }
-
 /* BB FIXME */
-/*     rc = cifs_sign_smb2(in_buf, data, ses->server, &midQ->sequence_number); */
+/*     rc = cifs_sign_smb2(iov, n_vec, ses->server, &midQ->sequence_number); */
 
        midQ->midState = MID_REQUEST_SUBMITTED;
        rc = smb_send2(ses->server->ssocket, iov, n_vec,