shithub: gefs

Download patch

ref: e2994142e890cd2ac79cc9ac3b76900ffce420b4
parent: b659452249216050f1d2f7f85d3b04220204a293
author: Ori Bernstein <ori@eigenstate.org>
date: Mon May 13 21:26:40 EDT 2024

fs: handle going readonly when syncing

--- a/fs.c
+++ b/fs.c
@@ -67,8 +67,6 @@
 	int i;
 
 
-	if(fs->rdonly)
-		return;
 	qlock(&fs->synclk);
 	if(waserror()){
 		fprint(2, "failed to sync: %s\n", errmsg());
@@ -2425,6 +2423,8 @@
 			tracem("syncreq");
 			if(!fs->snap.dirty && !am->halt)
 				continue;
+			if(agetl(&fs->rdonly))
+				goto Justhalt;
 			if(waserror()){
 				fprint(2, "sync error: %s\n", errmsg());
 				ainc(&fs->rdonly);
@@ -2474,6 +2474,7 @@
 				}
 			}
 
+Justhalt:
 			if(am->halt){
 				assert(fs->snapdl.hd.addr == -1);
 				assert(fs->snapdl.tl.addr == -1);
@@ -2485,6 +2486,10 @@
 
 		case AOsnap:
 			tracem("snapreq");
+			if(agetl(&fs->rdonly)){
+				fprint(2, "read only fs");
+				continue;
+			}
 			if(waserror()){
 				fprint(2, "taking snap: %s\n", errmsg());
 				ainc(&fs->rdonly);