Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9a0c8230e84898ed27f790408805e33fa482b2f9
Commit:     9a0c8230e84898ed27f790408805e33fa482b2f9
Parent:     030e9d8147491a9d2fe1b67882a3720fcf8b95f7
Author:     Steve French <[EMAIL PROTECTED]>
AuthorDate: Fri Feb 2 04:21:57 2007 +0000
Committer:  Steve French <[EMAIL PROTECTED]>
CommitDate: Fri Feb 2 04:21:57 2007 +0000

    [CIFS] Reduce cifs stack space usage
    
    The two cifs functions that used the most stack according
    to "make checkstack" have been changed to use less stack.
    
    Thanks to jra and Shaggy for helpful ideas
    
    Signed-off-by: Steve French <[EMAIL PROTECTED]>
    cc: [EMAIL PROTECTED]
    cc: [EMAIL PROTECTED]
---
 fs/cifs/file.c   |   12 +++++++++---
 fs/cifs/smbdes.c |    8 +++++++-
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/fs/cifs/file.c b/fs/cifs/file.c
index 8a49b2e..e9dcf5e 100644
--- a/fs/cifs/file.c
+++ b/fs/cifs/file.c
@@ -1146,7 +1146,7 @@ static int cifs_writepages(struct address_space *mapping,
        pgoff_t end;
        pgoff_t index;
        int range_whole = 0;
-       struct kvec iov[32];
+       struct kvec * iov;
        int len;
        int n_iov = 0;
        pgoff_t next;
@@ -1171,15 +1171,21 @@ static int cifs_writepages(struct address_space 
*mapping,
        if((cifs_sb->tcon->ses) && (cifs_sb->tcon->ses->server))
                if(cifs_sb->tcon->ses->server->secMode &
                           (SECMODE_SIGN_REQUIRED | SECMODE_SIGN_ENABLED))
-                       if(!experimEnabled)
+                       if(!experimEnabled) 
                                return generic_writepages(mapping, wbc);
 
+       iov = kmalloc(32 * sizeof(struct kvec), GFP_KERNEL);
+       if(iov == NULL)
+               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
         */
        if (wbc->nonblocking && bdi_write_congested(bdi)) {
                wbc->encountered_congestion = 1;
+               kfree(iov);
                return 0;
        }
 
@@ -1345,7 +1351,7 @@ retry:
                mapping->writeback_index = index;
 
        FreeXid(xid);
-
+       kfree(iov);
        return rc;
 }
 
diff --git a/fs/cifs/smbdes.c b/fs/cifs/smbdes.c
index 7a1b2b9..1a4a395 100644
--- a/fs/cifs/smbdes.c
+++ b/fs/cifs/smbdes.c
@@ -196,7 +196,7 @@ dohash(char *out, char *in, char *key, int forw)
        char c[28];
        char d[28];
        char *cd;
-       char ki[16][48];
+       char (*ki)[48];
        char *pd1;
        char l[32], r[32];
        char *rl;
@@ -206,6 +206,10 @@ dohash(char *out, char *in, char *key, int forw)
        if(pk1 == NULL)
                return;
 
+       ki = kmalloc(16*48, GFP_KERNEL);
+       if(ki == NULL)
+               return;
+
        cd = pk1 + 56;
        pd1= cd  + 56;
        rl = pd1 + 64;
@@ -243,6 +247,7 @@ dohash(char *out, char *in, char *key, int forw)
                er = kmalloc(48+48+32+32+32, GFP_KERNEL);
                if(er == NULL) {
                        kfree(pk1);
+                       kfree(ki);
                        return;
                }
                erk = er+48;
@@ -290,6 +295,7 @@ dohash(char *out, char *in, char *key, int forw)
 
        permute(out, rl, perm6, 64);
        kfree(pk1);
+       kfree(ki);
 }
 
 static void
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to