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();
--
⑨