shithub: gefs

Download patch

ref: 7a9e24c121eb4d2084d38bf55b767b99bb192bef
parent: c660119c2be0afecd22e6e533dd103173be8c361
author: Ori Bernstein <ori@eigenstate.org>
date: Mon Dec 18 16:12:58 EST 2023

main: 'noswap' ourselves

we don't want to get oomkilled, and swapping an fs
to itself seems like a bad idea.

--- a/main.c
+++ b/main.c
@@ -28,6 +28,23 @@
 Blk	*blkbuf;
 void	**errctx;
 
+static void
+nokill(void)
+{
+	char buf[128];
+	int fd;
+
+	snprint(buf, sizeof(buf), "/proc/%d/ctl", getpid());
+	if((fd = open(buf, OWRITE)) == -1){
+		fprint(2, "nokill: open %s: %r", buf);
+		return;
+	}
+	if(fprint(fd, "noswap\n") == -1){
+		fprint(2, "nokill: write %s: %r", buf);
+		return;
+	}
+}
+
 static uvlong
 memsize(void)
 {
@@ -162,6 +179,7 @@
 	if (pid < 0)
 		sysfatal("can't fork: %r");
 	if (pid == 0) {
+		nokill();
 		id = aincl(&fs->nworker, 1);
 		if((*errctx = mallocz(sizeof(Errctx), 1)) == nil)
 			sysfatal("malloc: %r");
@@ -342,6 +360,7 @@
 	}
 
 	rfork(RFNOTEG);
+	nokill();
 	loadfs(dev);
 	if(check && !checkfs(2))
 		sysfatal("fishy");