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;
}