From: Darrick J. Wong <djwong@xxxxxxxxxx> Fix a couple of bugs with the errcode/ret handling in op_truncate. First, we need to return ESTALE for a zero inumber because there is no inode zero in an ext* filesystem. Second, we need to return negative errno for failures to libfuse, not raw errcode_t. Cc: <linux-ext4@xxxxxxxxxxxxxxx> # v1.43 Fixes: 81cbf1ef4f5dab ("misc: add fuse2fs, a FUSE server for e2fsprogs") Signed-off-by: "Darrick J. Wong" <djwong@xxxxxxxxxx> --- misc/fuse2fs.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/misc/fuse2fs.c b/misc/fuse2fs.c index 33f72cf08f7b3a..74f1ca81aebc61 100644 --- a/misc/fuse2fs.c +++ b/misc/fuse2fs.c @@ -1963,10 +1963,14 @@ static int op_truncate(const char *path, off_t len fs = ff->fs; pthread_mutex_lock(&ff->bfl); err = ext2fs_namei(fs, EXT2_ROOT_INO, EXT2_ROOT_INO, path, &ino); - if (err || ino == 0) { + if (err) { ret = translate_error(fs, 0, err); goto out; } + if (!ino) { + ret = -ESTALE; + goto out; + } dbg_printf(ff, "%s: ino=%d len=%jd\n", __func__, ino, len); ret = check_inum_access(fs, ino, W_OK); @@ -1998,7 +2002,7 @@ static int op_truncate(const char *path, off_t len out: pthread_mutex_unlock(&ff->bfl); - return err; + return ret; } #ifdef __linux__