shithub: gefs

Download patch

ref: 31ff354ea65c8f0904ecec1842abdc9df650ba18
parent: 7ebf10d47b1795719f77c47f0b0880a423a0a512
author: Ori Bernstein <ori@eigenstate.org>
date: Sun Feb 25 23:05:34 EST 2024

WIP

--- a/fs.c
+++ b/fs.c
@@ -59,6 +59,7 @@
 {
 	Mount *mnt;
 	Arena *a;
+	Dlist dl;
 	int i;
 
 
@@ -117,6 +118,10 @@
 	finalize(fs->sb0);
 	finalize(fs->sb1);
 	fs->snap.dirty = 0;
+	dl = fs->snapdl;
+	fs->snapdl.hd = Zb;
+	fs->snapdl.tl = Zb;
+	fs->snapdl.ins = nil;
 	qunlock(&fs->mutlk);
 
 	/*
@@ -154,7 +159,7 @@
 	 * Pass 4: clean up the old snap tree's deadlist
 	 */
 	tracem("snapdl");
-	freedl(&fs->snapdl, 1);
+	freedl(&dl, 1);
 	fs->snapdl.hd.addr = -1;
 	fs->snapdl.hd.hash = -1;
 	fs->snapdl.hd.gen = -1;
--- a/snap.c
+++ b/snap.c
@@ -169,7 +169,7 @@
 		}
 		bp = b->logp;
 		traceb("dlfreeb", b->bp);
-		freeblk(&fs->snap, b, b->bp);
+		freeblk(nil, b, b->bp);
 		dropblk(b);
 	}
 }
@@ -522,6 +522,7 @@
 	Dlist *dl, *n;
 
 	tracem("dlsync");
+	dlflush(&fs->snapdl);
 	for(dl = fs->dlhead; dl != nil; dl = n){
 		n = dl->cnext;
 		dlflush(dl);