summaryrefslogtreecommitdiff
path: root/object-file.c
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-06-30 00:01:32 (GMT)
committerJunio C Hamano <gitster@pobox.com>2021-06-30 06:14:25 (GMT)
commitdc0592941138df684770bfe800ccad6b810214c3 (patch)
treec568b52865a4551c0c39a2331e24dee77c0f69a3 /object-file.c
parent670b81a890388c60b7032a4f5b879f2ece8c4558 (diff)
downloadgit-dc0592941138df684770bfe800ccad6b810214c3.zip
git-dc0592941138df684770bfe800ccad6b810214c3.tar.gz
git-dc0592941138df684770bfe800ccad6b810214c3.tar.bz2
xmmap: inform Linux users of tuning knobs on ENOMEM
Linux users may benefit from additional information on how to avoid ENOMEM from mmap despite the system having enough RAM to accomodate them. We can't reliably unmap pack windows to work around the issue since malloc and other library routines may mmap without our knowledge. Signed-off-by: Eric Wong <e@80x24.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'object-file.c')
-rw-r--r--object-file.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/object-file.c b/object-file.c
index f233b44..b9c3219 100644
--- a/object-file.c
+++ b/object-file.c
@@ -1023,12 +1023,26 @@ void *xmmap_gently(void *start, size_t length,
return ret;
}
+const char *mmap_os_err(void)
+{
+ static const char blank[] = "";
+#if defined(__linux__)
+ if (errno == ENOMEM) {
+ /* this continues an existing error message: */
+ static const char enomem[] =
+", check sys.vm.max_map_count and/or RLIMIT_DATA";
+ return enomem;
+ }
+#endif /* OS-specific bits */
+ return blank;
+}
+
void *xmmap(void *start, size_t length,
int prot, int flags, int fd, off_t offset)
{
void *ret = xmmap_gently(start, length, prot, flags, fd, offset);
if (ret == MAP_FAILED)
- die_errno(_("mmap failed"));
+ die_errno(_("mmap failed%s"), mmap_os_err());
return ret;
}