ref: 3746320ff30e2adb47314951e53974482b5f0364
parent: 204c060f121fe9c5da9a6b9bf73f867f0e728470
	author: Ori Bernstein <ori@eigenstate.org>
	date: Mon Aug  4 14:05:34 EDT 2025
	
gefs: track nulldir more accurately
--- a/sys/src/cmd/gefs/fs.c
+++ b/sys/src/cmd/gefs/fs.c
@@ -1513,7 +1513,7 @@
 {char rnbuf[Kvmax], opbuf[Kvmax], upbuf[Upksz];
char *p, *e, strs[65535];
- int op, nm, rename;
+ int op, nm, rename, nulldir;
vlong oldlen;
Qid old;
Fcall r;
@@ -1552,10 +1552,12 @@
n = de->Xdir;
n.qid.vers++;
p = opbuf+1;
+ nulldir = 1;
op = 0;
/* check validity of updated fields and construct Owstat message */
 	if(d.qid.path != ~0 || d.qid.vers != ~0){+ nulldir = 0;
if(d.qid.path != de->qid.path)
error(Ewstatp);
if(d.qid.vers != de->qid.vers)
@@ -1562,6 +1564,7 @@
error(Ewstatv);
}
 	if(*d.name != '\0'){+ nulldir = 0;
if(strlen(d.name) > Maxname)
error(Elength);
 		if(strcmp(d.name, de->name) != 0){@@ -1574,6 +1577,7 @@
}
}
 	if(d.length != ~0){+ nulldir = 0;
if(d.length < 0)
error(Ewstatl);
 		if(d.length != de->length){@@ -1604,6 +1608,7 @@
}
}
 	if(d.mode != ~0){+ nulldir = 0;
if((d.mode^de->mode) & DMDIR)
error(Ewstatd);
if(d.mode & ~(DMDIR|DMAPPEND|DMEXCL|DMTMP|0777))
@@ -1617,6 +1622,7 @@
}
}
 	if(d.mtime != ~0){+ nulldir = 0;
n.mtime = d.mtime*Nsec;
 		if(n.mtime != de->mtime){op |= Owmtime;
@@ -1625,6 +1631,7 @@
}
}
 	if(*d.uid != '\0'){+ nulldir = 0;
if(strlen(d.uid) > Maxuname)
error(Elength);
rlock(&fs->userlk);
@@ -1642,6 +1649,7 @@
}
}
 	if(*d.gid != '\0'){+ nulldir = 0;
if(strlen(d.gid) > Maxuname)
error(Elength);
rlock(&fs->userlk);
@@ -1658,7 +1666,7 @@
p += 4;
}
}
-	if(op == 0 && rename == 0){+	if(nulldir && rename == 0){*ao = emalloc(sizeof(Amsg), 1);
(*ao)->op = AOsync;
(*ao)->m = m;
--
⑨