shithub: front

Download patch

ref: 7390f4361bedc24705094838ca6facd5d5b12b52
parent: 51ff3e65038c3d135dccc8fef354413876da4c4c
author: Ori Bernstein <ori@eigenstate.org>
date: Mon Aug 4 13:58:31 EDT 2025

gefs: respond with Rwstat in all necessary AOsync cases

when we had a clean or read-only snap, we would skip syncing the
file system, but this also meant we would skip responding to an
Twstat(nulldir) that had turned into a sync.

--- a/sys/src/cmd/gefs/fs.c
+++ b/sys/src/cmd/gefs/fs.c
@@ -2797,14 +2797,15 @@
 			break;
 		case AOsync:
 			tracem("syncreq");
-			if(!fs->snap.dirty || agetl(&fs->rdonly))
-				goto Next;
 			if(waserror()){
 				fprint(2, "sync error: %s\n", errmsg());
+				if(am->m != nil)
+					rerror(am->m, Eio);
 				ainc(&fs->rdonly);
 				break;
 			}
-
+			if(!fs->snap.dirty || agetl(&fs->rdonly))
+				goto Syncout;
 			for(i = 0; i < fs->narena; i++){
 				a = &fs->arenas[i];
 				oldhd[i].addr = -1;
@@ -2852,9 +2853,10 @@
 					epochclean();
 				}
 			}
+Syncout:
 			if(am->m != nil){
 				assert(am->m->type == Twstat);
-				r.type = am->m->type + 1;
+				r.type = Rwstat;
 				respond(am->m, &r);
 			}
 			poperror();
--