diff --git a/src/nfs/nfs_kv_getattr.cpp b/src/nfs/nfs_kv_getattr.cpp index d69456f3..1cc6503e 100644 --- a/src/nfs/nfs_kv_getattr.cpp +++ b/src/nfs/nfs_kv_getattr.cpp @@ -166,7 +166,20 @@ int kv_nfs3_access_proc(void *opaque, rpc_op_t *rop) fprintf(stderr, "[%d] ACCESS %ju -> %s\n", self->nfs_fd, ino, value.c_str()); if (res < 0) { - *reply = (ACCESS3res){ .status = vitastor_nfs_map_err(-res) }; + // Broken inode (non-existing), allow only root access + if (!rop->auth_sys.uid) + { + *reply = (ACCESS3res){ + .status = NFS3_OK, + .resok = (ACCESS3resok){ + .access = args->access, + }, + }; + } + else + { + *reply = (ACCESS3res){ .status = vitastor_nfs_map_err(-res) }; + } } else { diff --git a/tests/test_nfs.sh b/tests/test_nfs.sh index e7fd93bc..9be24213 100755 --- a/tests/test_nfs.sh +++ b/tests/test_nfs.sh @@ -179,7 +179,7 @@ build/src/kv/vitastor-kv --etcd_address $ETCD_URL fsmeta set d11/settings.jsonLG sudo mount localhost:/ ./testdata/nfs -o port=2050,mountport=2050,nfsvers=3,soft,nolock,tcp ls -l ./testdata/nfs ls -l ./testdata/nfs/settings.jsonLGNmGn -rm ./testdata/nfs/settings.jsonLGNmGn +sudo rm ./testdata/nfs/settings.jsonLGNmGn build/src/kv/vitastor-kv --etcd_address $ETCD_URL fsmeta get d11/settings.jsonLGNmGn 2>&1 | grep '(code -2)' ls -l ./testdata/nfs @@ -189,7 +189,7 @@ build/src/kv/vitastor-kv --etcd_address $ETCD_URL fsmeta set d11/settings.jsonLG sudo mount localhost:/ ./testdata/nfs -o port=2050,mountport=2050,nfsvers=3,soft,nolock,tcp ls -l ./testdata/nfs ls -l ./testdata/nfs/settings.jsonLGNmGn -rm ./testdata/nfs/settings.jsonLGNmGn +sudo rm ./testdata/nfs/settings.jsonLGNmGn build/src/kv/vitastor-kv --etcd_address $ETCD_URL fsmeta get d11/settings.jsonLGNmGn 2>&1 | grep '(code -2)' ls -l ./testdata/nfs