diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/cifs/file.c | 12 | ||||
-rw-r--r-- | 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 8a49b2e77d37..e9dcf5ee29a2 100644 --- a/fs/cifs/file.c +++ b/fs/cifs/file.c | |||
@@ -1146,7 +1146,7 @@ static int cifs_writepages(struct address_space *mapping, | |||
1146 | pgoff_t end; | 1146 | pgoff_t end; |
1147 | pgoff_t index; | 1147 | pgoff_t index; |
1148 | int range_whole = 0; | 1148 | int range_whole = 0; |
1149 | struct kvec iov[32]; | 1149 | struct kvec * iov; |
1150 | int len; | 1150 | int len; |
1151 | int n_iov = 0; | 1151 | int n_iov = 0; |
1152 | pgoff_t next; | 1152 | pgoff_t next; |
@@ -1171,15 +1171,21 @@ static int cifs_writepages(struct address_space *mapping, | |||
1171 | if((cifs_sb->tcon->ses) && (cifs_sb->tcon->ses->server)) | 1171 | if((cifs_sb->tcon->ses) && (cifs_sb->tcon->ses->server)) |
1172 | if(cifs_sb->tcon->ses->server->secMode & | 1172 | if(cifs_sb->tcon->ses->server->secMode & |
1173 | (SECMODE_SIGN_REQUIRED | SECMODE_SIGN_ENABLED)) | 1173 | (SECMODE_SIGN_REQUIRED | SECMODE_SIGN_ENABLED)) |
1174 | if(!experimEnabled) | 1174 | if(!experimEnabled) |
1175 | return generic_writepages(mapping, wbc); | 1175 | return generic_writepages(mapping, wbc); |
1176 | 1176 | ||
1177 | iov = kmalloc(32 * sizeof(struct kvec), GFP_KERNEL); | ||
1178 | if(iov == NULL) | ||
1179 | return generic_writepages(mapping, wbc); | ||
1180 | |||
1181 | |||
1177 | /* | 1182 | /* |
1178 | * BB: Is this meaningful for a non-block-device file system? | 1183 | * BB: Is this meaningful for a non-block-device file system? |
1179 | * If it is, we should test it again after we do I/O | 1184 | * If it is, we should test it again after we do I/O |
1180 | */ | 1185 | */ |
1181 | if (wbc->nonblocking && bdi_write_congested(bdi)) { | 1186 | if (wbc->nonblocking && bdi_write_congested(bdi)) { |
1182 | wbc->encountered_congestion = 1; | 1187 | wbc->encountered_congestion = 1; |
1188 | kfree(iov); | ||
1183 | return 0; | 1189 | return 0; |
1184 | } | 1190 | } |
1185 | 1191 | ||
@@ -1345,7 +1351,7 @@ retry: | |||
1345 | mapping->writeback_index = index; | 1351 | mapping->writeback_index = index; |
1346 | 1352 | ||
1347 | FreeXid(xid); | 1353 | FreeXid(xid); |
1348 | 1354 | kfree(iov); | |
1349 | return rc; | 1355 | return rc; |
1350 | } | 1356 | } |
1351 | 1357 | ||
diff --git a/fs/cifs/smbdes.c b/fs/cifs/smbdes.c index 7a1b2b961ec8..1a4a395c9376 100644 --- a/fs/cifs/smbdes.c +++ b/fs/cifs/smbdes.c | |||
@@ -196,7 +196,7 @@ dohash(char *out, char *in, char *key, int forw) | |||
196 | char c[28]; | 196 | char c[28]; |
197 | char d[28]; | 197 | char d[28]; |
198 | char *cd; | 198 | char *cd; |
199 | char ki[16][48]; | 199 | char (*ki)[48]; |
200 | char *pd1; | 200 | char *pd1; |
201 | char l[32], r[32]; | 201 | char l[32], r[32]; |
202 | char *rl; | 202 | char *rl; |
@@ -206,6 +206,10 @@ dohash(char *out, char *in, char *key, int forw) | |||
206 | if(pk1 == NULL) | 206 | if(pk1 == NULL) |
207 | return; | 207 | return; |
208 | 208 | ||
209 | ki = kmalloc(16*48, GFP_KERNEL); | ||
210 | if(ki == NULL) | ||
211 | return; | ||
212 | |||
209 | cd = pk1 + 56; | 213 | cd = pk1 + 56; |
210 | pd1= cd + 56; | 214 | pd1= cd + 56; |
211 | rl = pd1 + 64; | 215 | rl = pd1 + 64; |
@@ -243,6 +247,7 @@ dohash(char *out, char *in, char *key, int forw) | |||
243 | er = kmalloc(48+48+32+32+32, GFP_KERNEL); | 247 | er = kmalloc(48+48+32+32+32, GFP_KERNEL); |
244 | if(er == NULL) { | 248 | if(er == NULL) { |
245 | kfree(pk1); | 249 | kfree(pk1); |
250 | kfree(ki); | ||
246 | return; | 251 | return; |
247 | } | 252 | } |
248 | erk = er+48; | 253 | erk = er+48; |
@@ -290,6 +295,7 @@ dohash(char *out, char *in, char *key, int forw) | |||
290 | 295 | ||
291 | permute(out, rl, perm6, 64); | 296 | permute(out, rl, perm6, 64); |
292 | kfree(pk1); | 297 | kfree(pk1); |
298 | kfree(ki); | ||
293 | } | 299 | } |
294 | 300 | ||
295 | static void | 301 | static void |