ref: d164aa7714b3a0f679bcacffb9a716a57cb7c0cb
parent: f6343dccd7c7a52c1f7688790fcf5822b5ece9ec
	author: Ori Bernstein <ori@eigenstate.org>
	date: Mon May  8 07:05:35 EDT 2023
	
gefs: correctly handle OEXCL locking
--- a/dat.h
+++ b/dat.h
@@ -130,7 +130,6 @@
extern char Etype[];
extern char Edscan[];
extern char Esrch[];
-extern char Efsrch[];
extern char Eexist[];
extern char Emode[];
extern char Efull[];
--- a/error.c
+++ b/error.c
@@ -11,8 +11,7 @@
char Efid[] = "fid in use";
char Etype[] = "invalid fid type";
char Edscan[] = "invalid dir scan offset";
-char Esrch[] = "key not found";
-char Efsrch[] = "directory entry not found";
+char Esrch[] = "directory entry not found";
char Eexist[] = "create/wstat -- file exists";
char Emode[] = "open/create -- unknown mode";
char Efull[] = "file system full";
--- a/fs.c
+++ b/fs.c
@@ -1080,7 +1080,7 @@
name = m->wname[i];
 		if(d.qid.path == Qdump){ 			if((mnt = getmount(m->wname[i])) == nil){- rerror(m, Efsrch);
+ rerror(m, Esrch);
putfid(o);
return;
}
@@ -1691,7 +1691,8 @@
putfid(f);
return;
}
-	if(f->dent->mode & DMEXCL){+ if(f->dent->qid.type & QTEXCL)
+	if(f->dent->ref != 1){rerror(m, Elocked);
goto Disallow;
}
--
⑨