libbb/copyfd.c: don't mmap a largish buffer if we only want to copy a few kb

function                                             old     new   delta
bb_full_fd_action                                    283     295     +12

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2010-03-19 14:34:30 +01:00
parent 892d4b6b3d
commit bcda0042e2

View File

@ -22,6 +22,8 @@ static off_t bb_full_fd_action(int src_fd, int dst_fd, off_t size)
char *buffer; char *buffer;
int buffer_size; int buffer_size;
if (size > 0 && size <= 4 * 1024)
goto use_small_buf;
/* We want page-aligned buffer, just in case kernel is clever /* We want page-aligned buffer, just in case kernel is clever
* and can do page-aligned io more efficiently */ * and can do page-aligned io more efficiently */
buffer = mmap(NULL, CONFIG_FEATURE_COPYBUF_KB * 1024, 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)
/* ignored: */ -1, 0); /* ignored: */ -1, 0);
buffer_size = CONFIG_FEATURE_COPYBUF_KB * 1024; buffer_size = CONFIG_FEATURE_COPYBUF_KB * 1024;
if (buffer == MAP_FAILED) { if (buffer == MAP_FAILED) {
use_small_buf:
buffer = alloca(4 * 1024); buffer = alloca(4 * 1024);
buffer_size = 4 * 1024; buffer_size = 4 * 1024;
} }