From: Lucas De Marchi Date: Fri, 2 Mar 2012 23:33:26 +0000 (-0300) Subject: libkmod-index: do not pre-populate mmap X-Git-Tag: v6~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2e2e252bd44b7f0bbfc62cd04869dcb7ff073514;p=thirdparty%2Fkmod.git libkmod-index: do not pre-populate mmap If we tell mmap to populate all the indexes and they are big, this will impact load time. Let them be mapped as they are used. --- diff --git a/libkmod/libkmod-index.c b/libkmod/libkmod-index.c index 1698d7fc..e3850f68 100644 --- a/libkmod/libkmod-index.c +++ b/libkmod/libkmod-index.c @@ -771,10 +771,9 @@ static void index_mm_free_node(struct index_mm_node *node) } struct index_mm *index_mm_open(struct kmod_ctx *ctx, const char *filename, - bool populate, unsigned long long *stamp) + unsigned long long *stamp) { int fd; - int flags; struct stat st; struct index_mm *idx; struct { @@ -798,14 +797,11 @@ struct index_mm *index_mm_open(struct kmod_ctx *ctx, const char *filename, } fstat(fd, &st); - flags = MAP_PRIVATE; - if (populate) - flags |= MAP_POPULATE; - if ((idx->mm = mmap(0, st.st_size, PROT_READ, flags, fd, 0)) + if ((idx->mm = mmap(0, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0)) == MAP_FAILED) { - ERR(ctx, "mmap(0, %zd, PROT_READ, %d, %d, 0): %m\n", - (size_t)st.st_size, flags, fd); + ERR(ctx, "mmap(0, %zd, PROT_READ, %d, MAP_PRIVATE, 0): %m\n", + st.st_size, fd); goto fail; } diff --git a/libkmod/libkmod-index.h b/libkmod/libkmod-index.h index 0134ac50..dd3a7626 100644 --- a/libkmod/libkmod-index.h +++ b/libkmod/libkmod-index.h @@ -122,7 +122,7 @@ void index_values_free(struct index_value *values); /* Implementation using mmap */ struct index_mm; struct index_mm *index_mm_open(struct kmod_ctx *ctx, const char *filename, - bool populate, unsigned long long *stamp); + unsigned long long *stamp); void index_mm_close(struct index_mm *index); char *index_mm_search(struct index_mm *idx, const char *key); struct index_value *index_mm_searchwild(struct index_mm *idx, const char *key); diff --git a/libkmod/libkmod.c b/libkmod/libkmod.c index 6c3e0f84..02f3b14b 100644 --- a/libkmod/libkmod.c +++ b/libkmod/libkmod.c @@ -807,7 +807,7 @@ KMOD_EXPORT int kmod_load_resources(struct kmod_ctx *ctx) snprintf(path, sizeof(path), "%s/%s.bin", ctx->dirname, index_files[i].fn); - ctx->indexes[i] = index_mm_open(ctx, path, true, + ctx->indexes[i] = index_mm_open(ctx, path, &ctx->indexes_stamp[i]); if (ctx->indexes[i] == NULL) goto fail;