modutils: add FEATURE_INSMOD_TRY_MMAP option
function old new delta try_to_mmap_module - 121 +121 bb_init_module_24 4514 4578 +64 bb_init_module 119 173 +54 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 2/0 up/down: 239/0) Total: 239 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
@ -3783,12 +3783,20 @@ int FAST_FUNC bb_init_module_24(const char *m_filename, const char *options)
|
||||
int m_has_modinfo;
|
||||
#endif
|
||||
char *image;
|
||||
size_t image_size = 64 * 1024 * 1024;
|
||||
size_t image_size;
|
||||
bool mmaped;
|
||||
|
||||
/* Load module into memory and unzip if compressed */
|
||||
image = xmalloc_open_zipped_read_close(m_filename, &image_size);
|
||||
if (!image)
|
||||
return EXIT_FAILURE;
|
||||
image_size = INT_MAX - 4095;
|
||||
mmaped = 0;
|
||||
image = try_to_mmap_module(m_filename, &image_size);
|
||||
if (image) {
|
||||
mmaped = 1;
|
||||
} else {
|
||||
/* Load module into memory and unzip if compressed */
|
||||
image = xmalloc_open_zipped_read_close(m_filename, &image_size);
|
||||
if (!image)
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
m_name = xstrdup(bb_basename(m_filename));
|
||||
/* "module.o[.gz]" -> "module" */
|
||||
@ -3901,7 +3909,10 @@ int FAST_FUNC bb_init_module_24(const char *m_filename, const char *options)
|
||||
exit_status = EXIT_SUCCESS;
|
||||
|
||||
out:
|
||||
free(image);
|
||||
if (mmaped)
|
||||
munmap(image, image_size);
|
||||
else
|
||||
free(image);
|
||||
free(m_name);
|
||||
|
||||
return exit_status;
|
||||
|
Reference in New Issue
Block a user