diff options
| -rw-r--r-- | fs/pstore/platform.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c index 4ffb7ab5e397..57b4219398cd 100644 --- a/fs/pstore/platform.c +++ b/fs/pstore/platform.c | |||
| @@ -195,8 +195,29 @@ error: | |||
| 195 | static void allocate_buf_for_compression(void) | 195 | static void allocate_buf_for_compression(void) |
| 196 | { | 196 | { |
| 197 | size_t size; | 197 | size_t size; |
| 198 | size_t cmpr; | ||
| 199 | |||
| 200 | switch (psinfo->bufsize) { | ||
| 201 | /* buffer range for efivars */ | ||
| 202 | case 1000 ... 2000: | ||
| 203 | cmpr = 56; | ||
| 204 | break; | ||
| 205 | case 2001 ... 3000: | ||
| 206 | cmpr = 54; | ||
| 207 | break; | ||
| 208 | case 3001 ... 3999: | ||
| 209 | cmpr = 52; | ||
| 210 | break; | ||
| 211 | /* buffer range for nvram, erst */ | ||
| 212 | case 4000 ... 10000: | ||
| 213 | cmpr = 45; | ||
| 214 | break; | ||
| 215 | default: | ||
| 216 | cmpr = 60; | ||
| 217 | break; | ||
| 218 | } | ||
| 198 | 219 | ||
| 199 | big_oops_buf_sz = (psinfo->bufsize * 100) / 45; | 220 | big_oops_buf_sz = (psinfo->bufsize * 100) / cmpr; |
| 200 | big_oops_buf = kmalloc(big_oops_buf_sz, GFP_KERNEL); | 221 | big_oops_buf = kmalloc(big_oops_buf_sz, GFP_KERNEL); |
| 201 | if (big_oops_buf) { | 222 | if (big_oops_buf) { |
| 202 | size = max(zlib_deflate_workspacesize(WINDOW_BITS, MEM_LEVEL), | 223 | size = max(zlib_deflate_workspacesize(WINDOW_BITS, MEM_LEVEL), |
