diff options
Diffstat (limited to 'usr/src/lib/lib9p/common')
-rw-r--r-- | usr/src/lib/lib9p/common/backend/fs.c | 10 | ||||
-rw-r--r-- | usr/src/lib/lib9p/common/request.c | 6 |
2 files changed, 11 insertions, 5 deletions
diff --git a/usr/src/lib/lib9p/common/backend/fs.c b/usr/src/lib/lib9p/common/backend/fs.c index 4b7764cd86..792e17ebd2 100644 --- a/usr/src/lib/lib9p/common/backend/fs.c +++ b/usr/src/lib/lib9p/common/backend/fs.c @@ -1838,8 +1838,11 @@ fs_remove(void *softc, struct l9p_fid *fid) return (error); if (unlinkat(file->ff_dirfd, file->ff_name, - S_ISDIR(cst.st_mode) ? AT_REMOVEDIR : 0) != 0) + S_ISDIR(cst.st_mode) ? AT_REMOVEDIR : 0) != 0) { error = errno; + if (error == EEXIST && S_ISDIR(cst.st_mode)) + error = ENOTEMPTY; + } return (error); } @@ -3038,8 +3041,11 @@ fs_unlinkat(void *softc, struct l9p_request *req) return (error); if (req->lr_req.tunlinkat.flags & L9PL_AT_REMOVEDIR) { - if (unlinkat(dirff->ff_dirfd, newname, AT_REMOVEDIR) != 0) + if (unlinkat(dirff->ff_dirfd, newname, AT_REMOVEDIR) != 0) { error = errno; + if (error == EEXIST) + error = ENOTEMPTY; + } } else { if (unlinkat(dirff->ff_dirfd, newname, 0) != 0) error = errno; diff --git a/usr/src/lib/lib9p/common/request.c b/usr/src/lib/lib9p/common/request.c index 99885690af..644524e12d 100644 --- a/usr/src/lib/lib9p/common/request.c +++ b/usr/src/lib/lib9p/common/request.c @@ -1410,12 +1410,12 @@ l9p_dispatch_trenameat(struct l9p_request *req) int error; error = fid_lookup(conn, req->lr_req.hdr.fid, ENOENT, - F_REQUIRE_DIR | F_FORBID_OPEN, &req->lr_fid); + F_REQUIRE_DIR, &req->lr_fid); if (error) return (error); error = fid_lookup(conn, req->lr_req.trenameat.newdirfid, ENOENT, - F_REQUIRE_DIR | F_FORBID_OPEN, &req->lr_fid2); + F_REQUIRE_DIR, &req->lr_fid2); if (error) return (error); @@ -1434,7 +1434,7 @@ l9p_dispatch_tunlinkat(struct l9p_request *req) int error; error = fid_lookup(conn, req->lr_req.hdr.fid, ENOENT, - F_REQUIRE_DIR | F_FORBID_OPEN, &req->lr_fid); + F_REQUIRE_DIR, &req->lr_fid); if (error) return (error); |