diff options
Diffstat (limited to 'libbb')
-rw-r--r-- | libbb/copyfd.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/libbb/copyfd.c b/libbb/copyfd.c index c5f8b5b87..f42eb7623 100644 --- a/libbb/copyfd.c +++ b/libbb/copyfd.c | |||
@@ -22,6 +22,8 @@ static off_t bb_full_fd_action(int src_fd, int dst_fd, off_t size) | |||
22 | char *buffer; | 22 | char *buffer; |
23 | int buffer_size; | 23 | int buffer_size; |
24 | 24 | ||
25 | if (size > 0 && size <= 4 * 1024) | ||
26 | goto use_small_buf; | ||
25 | /* We want page-aligned buffer, just in case kernel is clever | 27 | /* We want page-aligned buffer, just in case kernel is clever |
26 | * and can do page-aligned io more efficiently */ | 28 | * and can do page-aligned io more efficiently */ |
27 | buffer = mmap(NULL, CONFIG_FEATURE_COPYBUF_KB * 1024, | 29 | buffer = mmap(NULL, CONFIG_FEATURE_COPYBUF_KB * 1024, |
@@ -30,6 +32,7 @@ static off_t bb_full_fd_action(int src_fd, int dst_fd, off_t size) | |||
30 | /* ignored: */ -1, 0); | 32 | /* ignored: */ -1, 0); |
31 | buffer_size = CONFIG_FEATURE_COPYBUF_KB * 1024; | 33 | buffer_size = CONFIG_FEATURE_COPYBUF_KB * 1024; |
32 | if (buffer == MAP_FAILED) { | 34 | if (buffer == MAP_FAILED) { |
35 | use_small_buf: | ||
33 | buffer = alloca(4 * 1024); | 36 | buffer = alloca(4 * 1024); |
34 | buffer_size = 4 * 1024; | 37 | buffer_size = 4 * 1024; |
35 | } | 38 | } |