---
fsdev/file-op-9p.h | 4 +-
hw/9pfs/virtio-9p-local.c | 121 ++++++++++++++++++++----------------
hw/9pfs/virtio-9p-xattr.c | 21 ++++++-
hw/9pfs/virtio-9p.c | 150 +++++++++++---------------------------------
4 files changed, 125 insertions(+), 171 deletions(-)
diff --git a/fsdev/file-op-9p.h b/fsdev/file-op-9p.h
index 126e60e..81a822a 100644
--- a/fsdev/file-op-9p.h
+++ b/fsdev/file-op-9p.h
@@ -73,12 +73,12 @@ typedef struct FileOperations
int (*setuid)(FsContext *, uid_t);
int (*close)(FsContext *, int);
int (*closedir)(FsContext *, DIR *);
- DIR *(*opendir)(FsContext *, const char *);
+ int (*opendir)(FsContext *, const char *, DIR **);
int (*open)(FsContext *, const char *, int);
int (*open2)(FsContext *, const char *, int, FsCred *);
void (*rewinddir)(FsContext *, DIR *);
off_t (*telldir)(FsContext *, DIR *);
- struct dirent *(*readdir)(FsContext *, DIR *);
+ int (*readdir)(FsContext *, DIR *, struct dirent **);
void (*seekdir)(FsContext *, DIR *, off_t);
ssize_t (*preadv)(FsContext *, int, const struct iovec *, int, off_t);
ssize_t (*pwritev)(FsContext *, int, const struct iovec *, int, off_t);
diff --git a/hw/9pfs/virtio-9p-local.c b/hw/9pfs/virtio-9p-local.c
index 0a015de..afaff78 100644
--- a/hw/9pfs/virtio-9p-local.c
+++ b/hw/9pfs/virtio-9p-local.c
@@ -26,7 +26,7 @@ static int local_lstat(FsContext *fs_ctx, const char *path,
struct stat *stbuf)
int err;
err = lstat(rpath(fs_ctx, path), stbuf);
if (err) {
- return err;
+ return -errno;
}
if (fs_ctx->fs_sm == SM_MAPPED) {
/* Actual credentials are part of extended attrs */
@@ -51,7 +51,7 @@ static int local_lstat(FsContext *fs_ctx, const char *path,
struct stat *stbuf)
stbuf->st_rdev = tmp_dev;
}
}
- return err;
+ return 0;
}
static int local_set_xattr(const char *path, FsCred *credp)
@@ -61,28 +61,28 @@ static int local_set_xattr(const char *path, FsCred *credp)
err = setxattr(path, "user.virtfs.uid",&credp->fc_uid, sizeof(uid_t),
0);
if (err) {
- return err;
+ return -errno;
}
}
if (credp->fc_gid != -1) {
err = setxattr(path, "user.virtfs.gid",&credp->fc_gid, sizeof(gid_t),
0);
if (err) {
- return err;
+ return -errno;
}
}
if (credp->fc_mode != -1) {
err = setxattr(path, "user.virtfs.mode",&credp->fc_mode,
sizeof(mode_t), 0);
if (err) {
- return err;
+ return -errno;
}
}
if (credp->fc_rdev != -1) {
err = setxattr(path, "user.virtfs.rdev",&credp->fc_rdev,
sizeof(dev_t), 0);
if (err) {
- return err;
+ return -errno;
}
}
return 0;
@@ -92,7 +92,7 @@ static int local_post_create_passthrough(FsContext *fs_ctx,
const char *path,
FsCred *credp)
{
if (chmod(rpath(fs_ctx, path), credp->fc_mode& 07777)< 0) {
- return -1;
+ return -errno;
}
if (lchown(rpath(fs_ctx, path), credp->fc_uid, credp->fc_gid)< 0) {
/*
@@ -100,7 +100,7 @@ static int local_post_create_passthrough(FsContext *fs_ctx,
const char *path,
* using security model none. Ignore the error
*/
if (fs_ctx->fs_sm != SM_NONE) {
- return -1;
+ return -errno;
}
}
return 0;
@@ -114,38 +114,40 @@ static ssize_t local_readlink(FsContext *fs_ctx, const
char *path,
int fd;
fd = open(rpath(fs_ctx, path), O_RDONLY);
if (fd == -1) {
- return -1;
+ return -errno;
}
do {
tsize = read(fd, (void *)buf, bufsz);
} while (tsize == -1&& errno == EINTR);
close(fd);
- return tsize;
+ return tsize>= 0 ? tsize : -errno;
} else if ((fs_ctx->fs_sm == SM_PASSTHROUGH) ||
(fs_ctx->fs_sm == SM_NONE)) {
tsize = readlink(rpath(fs_ctx, path), buf, bufsz);
}
- return tsize;
+ return tsize>= 0 ? tsize : -errno;
}
static int local_close(FsContext *ctx, int fd)
{
- return close(fd);
+ return close(fd) ? -errno : 0;
}
static int local_closedir(FsContext *ctx, DIR *dir)
{
- return closedir(dir);
+ return closedir(dir) ? -errno : 0;
}
static int local_open(FsContext *ctx, const char *path, int flags)
{
- return open(rpath(ctx, path), flags);
+ int ret = open(rpath(ctx, path), flags);
+ return ret>= 0 ? ret : -errno;
}
-static DIR *local_opendir(FsContext *ctx, const char *path)
+static int local_opendir(FsContext *ctx, const char *path, DIR **dir)
{
- return opendir(rpath(ctx, path));
+ *dir = opendir(rpath(ctx, path));
+ return *dir ? 0 : -errno;
}
static void local_rewinddir(FsContext *ctx, DIR *dir)
@@ -155,12 +157,15 @@ static void local_rewinddir(FsContext *ctx, DIR *dir)
static off_t local_telldir(FsContext *ctx, DIR *dir)
{
- return telldir(dir);
+ int ret = telldir(dir);
+ return ret>= 0 ? ret : -errno;
}
-static struct dirent *local_readdir(FsContext *ctx, DIR *dir)
+static int local_readdir(FsContext *ctx, DIR *dir, struct dirent **dirent)
{
- return readdir(dir);
+ *dirent = readdir(dir);
+ return dirent ? 0 : -errno;
+
}
static void local_seekdir(FsContext *ctx, DIR *dir, off_t off)
@@ -171,14 +176,17 @@ static void local_seekdir(FsContext *ctx, DIR *dir, off_t
off)
static ssize_t local_preadv(FsContext *ctx, int fd, const struct iovec *iov,
int iovcnt, off_t offset)
{
+ int err;
#ifdef CONFIG_PREADV
- return preadv(fd, iov, iovcnt, offset);
+ err = preadv(fd, iov, iovcnt, offset);
+ return err>= 0 ? err : -errno;
#else
int err = lseek(fd, offset, SEEK_SET);
if (err == -1) {
- return err;
+ return -errno;
} else {
- return readv(fd, iov, iovcnt);
+ err = readv(fd, iov, iovcnt);
+ return err>= 0 ? err : -errno;
}
#endif
}
@@ -186,27 +194,32 @@ static ssize_t local_preadv(FsContext *ctx, int fd, const
struct iovec *iov,
static ssize_t local_pwritev(FsContext *ctx, int fd, const struct iovec *iov,
int iovcnt, off_t offset)
{
+ int err;
#ifdef CONFIG_PREADV
- return pwritev(fd, iov, iovcnt, offset);
+ err = pwritev(fd, iov, iovcnt, offset);
+ return err>= 0 ? err : -errno;
#else
int err = lseek(fd, offset, SEEK_SET);
if (err == -1) {
- return err;
+ return -errno;
} else {
- return writev(fd, iov, iovcnt);
+ err = writev(fd, iov, iovcnt);
+ return err>= 0 ? err : -errno;
}
#endif
}
static int local_chmod(FsContext *fs_ctx, const char *path, FsCred *credp)
{
+ int ret;
if (fs_ctx->fs_sm == SM_MAPPED) {
return local_set_xattr(rpath(fs_ctx, path), credp);
} else if ((fs_ctx->fs_sm == SM_PASSTHROUGH) ||
(fs_ctx->fs_sm == SM_NONE)) {
- return chmod(rpath(fs_ctx, path), credp->fc_mode);
+ ret = chmod(rpath(fs_ctx, path), credp->fc_mode);
+ return ret>= 0 ? ret : -errno;
}
- return -1;
+ return -ENOTSUP;
}
static int local_mknod(FsContext *fs_ctx, const char *path, FsCred *credp)
@@ -218,7 +231,7 @@ static int local_mknod(FsContext *fs_ctx, const char *path,
FsCred *credp)
if (fs_ctx->fs_sm == SM_MAPPED) {
err = mknod(rpath(fs_ctx, path), SM_LOCAL_MODE_BITS|S_IFREG, 0);
if (err == -1) {
- return err;
+ return -errno;
}
local_set_xattr(rpath(fs_ctx, path), credp);
if (err == -1) {
@@ -229,7 +242,7 @@ static int local_mknod(FsContext *fs_ctx, const char *path,
FsCred *credp)
(fs_ctx->fs_sm == SM_NONE)) {
err = mknod(rpath(fs_ctx, path), credp->fc_mode, credp->fc_rdev);
if (err == -1) {
- return err;
+ return -errno;
}
err = local_post_create_passthrough(fs_ctx, path, credp);
if (err == -1) {
@@ -237,12 +250,12 @@ static int local_mknod(FsContext *fs_ctx, const char
*path, FsCred *credp)
goto err_end;
}
}
- return err;
+ return 0;
err_end:
remove(rpath(fs_ctx, path));
errno = serrno;
- return err;
+ return -errno;
}
static int local_mkdir(FsContext *fs_ctx, const char *path, FsCred *credp)
@@ -254,7 +267,7 @@ static int local_mkdir(FsContext *fs_ctx, const char *path,
FsCred *credp)
if (fs_ctx->fs_sm == SM_MAPPED) {
err = mkdir(rpath(fs_ctx, path), SM_LOCAL_DIR_MODE_BITS);
if (err == -1) {
- return err;
+ return -errno;
}
credp->fc_mode = credp->fc_mode|S_IFDIR;
err = local_set_xattr(rpath(fs_ctx, path), credp);
@@ -266,7 +279,7 @@ static int local_mkdir(FsContext *fs_ctx, const char *path,
FsCred *credp)
(fs_ctx->fs_sm == SM_NONE)) {
err = mkdir(rpath(fs_ctx, path), credp->fc_mode);
if (err == -1) {
- return err;
+ return -errno;
}
err = local_post_create_passthrough(fs_ctx, path, credp);
if (err == -1) {
@@ -274,12 +287,12 @@ static int local_mkdir(FsContext *fs_ctx, const char
*path, FsCred *credp)
goto err_end;
}
}
- return err;
+ return 0;
err_end:
remove(rpath(fs_ctx, path));
errno = serrno;
- return err;
+ return -errno;
}
static int local_fstat(FsContext *fs_ctx, int fd, struct stat *stbuf)
@@ -287,7 +300,7 @@ static int local_fstat(FsContext *fs_ctx, int fd, struct
stat *stbuf)
int err;
err = fstat(fd, stbuf);
if (err) {
- return err;
+ return -errno;
}
if (fs_ctx->fs_sm == SM_MAPPED) {
/* Actual credentials are part of extended attrs */
@@ -309,7 +322,7 @@ static int local_fstat(FsContext *fs_ctx, int fd, struct
stat *stbuf)
stbuf->st_rdev = tmp_dev;
}
}
- return err;
+ return 0;
}
static int local_open2(FsContext *fs_ctx, const char *path, int flags,
@@ -323,7 +336,7 @@ static int local_open2(FsContext *fs_ctx, const char *path,
int flags,
if (fs_ctx->fs_sm == SM_MAPPED) {
fd = open(rpath(fs_ctx, path), flags, SM_LOCAL_MODE_BITS);
if (fd == -1) {
- return fd;
+ return -errno;
}
credp->fc_mode = credp->fc_mode|S_IFREG;
/* Set cleint credentials in xattr */
@@ -336,7 +349,7 @@ static int local_open2(FsContext *fs_ctx, const char *path,
int flags,
(fs_ctx->fs_sm == SM_NONE)) {
fd = open(rpath(fs_ctx, path), flags, credp->fc_mode);
if (fd == -1) {
- return fd;
+ return -errno;
}
err = local_post_create_passthrough(fs_ctx, path, credp);
if (err == -1) {
@@ -350,7 +363,7 @@ err_end:
close(fd);
remove(rpath(fs_ctx, path));
errno = serrno;
- return err;
+ return -errno;
}
@@ -367,7 +380,7 @@ static int local_symlink(FsContext *fs_ctx, const char
*oldpath,
fd = open(rpath(fs_ctx, newpath), O_CREAT|O_EXCL|O_RDWR,
SM_LOCAL_MODE_BITS);
if (fd == -1) {
- return fd;
+ return -errno;
}
/* Write the oldpath (target) to the file. */
oldpath_size = strlen(oldpath);
@@ -393,7 +406,7 @@ static int local_symlink(FsContext *fs_ctx, const char
*oldpath,
(fs_ctx->fs_sm == SM_NONE)) {
err = symlink(oldpath, rpath(fs_ctx, newpath));
if (err) {
- return err;
+ return -errno;
}
err = lchown(rpath(fs_ctx, newpath), credp->fc_uid, credp->fc_gid);
if (err == -1) {
@@ -408,12 +421,12 @@ static int local_symlink(FsContext *fs_ctx, const char
*oldpath,
err = 0;
}
}
- return err;
+ return 0;
err_end:
remove(rpath(fs_ctx, newpath));
errno = serrno;
- return err;
+ return -errno;
}
static int local_link(FsContext *ctx, const char *oldpath, const char
*newpath)
@@ -436,12 +449,12 @@ static int local_link(FsContext *ctx, const char
*oldpath, const char *newpath)
errno = serrno;
}
- return err;
+ return err>= 0 ? err : -errno;
}
static int local_truncate(FsContext *ctx, const char *path, off_t size)
{
- return truncate(rpath(ctx, path), size);
+ return truncate(rpath(ctx, path), size) ? -errno : 0;
}
static int local_rename(FsContext *ctx, const char *oldpath,
@@ -461,7 +474,7 @@ static int local_rename(FsContext *ctx, const char *oldpath,
qemu_free(tmp);
}
- return err;
+ return err>= 0 ? err : -errno;
}
@@ -469,14 +482,14 @@ static int local_chown(FsContext *fs_ctx, const char
*path, FsCred *credp)
{
if ((credp->fc_uid == -1&& credp->fc_gid == -1) ||
(fs_ctx->fs_sm == SM_PASSTHROUGH)) {
- return lchown(rpath(fs_ctx, path), credp->fc_uid, credp->fc_gid);
+ return lchown(rpath(fs_ctx, path), credp->fc_uid, credp->fc_gid) ?
-errno : 0;
} else if (fs_ctx->fs_sm == SM_MAPPED) {
return local_set_xattr(rpath(fs_ctx, path), credp);
} else if ((fs_ctx->fs_sm == SM_PASSTHROUGH) ||
(fs_ctx->fs_sm == SM_NONE)) {
- return lchown(rpath(fs_ctx, path), credp->fc_uid, credp->fc_gid);
+ return lchown(rpath(fs_ctx, path), credp->fc_uid, credp->fc_gid) ?
-errno : 0;
}
- return -1;
+ return -EINVAL;
}
static int local_utimensat(FsContext *s, const char *path,
@@ -487,21 +500,21 @@ static int local_utimensat(FsContext *s, const char *path,
static int local_remove(FsContext *ctx, const char *path)
{
- return remove(rpath(ctx, path));
+ return remove(rpath(ctx, path)) ? -errno : 0;
}
static int local_fsync(FsContext *ctx, int fd, int datasync)
{
if (datasync) {
- return qemu_fdatasync(fd);
+ return qemu_fdatasync(fd) ? -errno : 0;
} else {
- return fsync(fd);
+ return fsync(fd) ? -errno : 0;
}
}
static int local_statfs(FsContext *s, const char *path, struct statfs *stbuf)
{
- return statfs(rpath(s, path), stbuf);
+ return statfs(rpath(s, path), stbuf) ? - errno : 0;
}
static ssize_t local_lgetxattr(FsContext *ctx, const char *path,
diff --git a/hw/9pfs/virtio-9p-xattr.c b/hw/9pfs/virtio-9p-xattr.c
index 03c3d3f..b37ea44 100644
--- a/hw/9pfs/virtio-9p-xattr.c
+++ b/hw/9pfs/virtio-9p-xattr.c
@@ -32,9 +32,14 @@ static XattrOperations *get_xattr_operations(XattrOperations
**h,
ssize_t v9fs_get_xattr(FsContext *ctx, const char *path,
const char *name, void *value, size_t size)
{
+ int ret;
XattrOperations *xops = get_xattr_operations(ctx->xops, name);
if (xops) {
- return xops->getxattr(ctx, path, name, value, size);
+ ret = xops->getxattr(ctx, path, name, value, size);
+ if (ret< 0) {
+ return -errno;
+ }
+ return ret;
}
errno = -EOPNOTSUPP;
return -1;
@@ -117,9 +122,14 @@ err_out:
int v9fs_set_xattr(FsContext *ctx, const char *path, const char *name,
void *value, size_t size, int flags)
{
+ int ret;
XattrOperations *xops = get_xattr_operations(ctx->xops, name);
if (xops) {
- return xops->setxattr(ctx, path, name, value, size, flags);
+ ret = xops->setxattr(ctx, path, name, value, size, flags);
+ if (ret< 0) {
+ return -errno;
+ }
+ return ret;
}
errno = -EOPNOTSUPP;
return -1;
@@ -129,9 +139,14 @@ int v9fs_set_xattr(FsContext *ctx, const char *path, const
char *name,
int v9fs_remove_xattr(FsContext *ctx,
const char *path, const char *name)
{
+ int ret;
XattrOperations *xops = get_xattr_operations(ctx->xops, name);
if (xops) {
- return xops->removexattr(ctx, path, name);
+ ret = xops->removexattr(ctx, path, name);
+ if (ret< 0) {
+ return -errno;
+ }
+ return ret;
}
errno = -EOPNOTSUPP;
return -1;
diff --git a/hw/9pfs/virtio-9p.c b/hw/9pfs/virtio-9p.c
index 9d72021..374a766 100644
--- a/hw/9pfs/virtio-9p.c
+++ b/hw/9pfs/virtio-9p.c
@@ -110,9 +110,9 @@ static int v9fs_do_open(V9fsState *s, V9fsString *path, int
flags)
return s->ops->open(&s->ctx, path->data, flags);
}
-static DIR *v9fs_do_opendir(V9fsState *s, V9fsString *path)
+static int v9fs_do_opendir(V9fsState *s, V9fsString *path, DIR **dir)
{
- return s->ops->opendir(&s->ctx, path->data);
+ return s->ops->opendir(&s->ctx, path->data, dir);
}
static void v9fs_do_rewinddir(V9fsState *s, DIR *dir)
@@ -125,9 +125,9 @@ static off_t v9fs_do_telldir(V9fsState *s, DIR *dir)
return s->ops->telldir(&s->ctx, dir);
}
-static struct dirent *v9fs_do_readdir(V9fsState *s, DIR *dir)
+static int v9fs_do_readdir(V9fsState *s, DIR *dir, struct dirent **dirent)
{
- return s->ops->readdir(&s->ctx, dir);
+ return s->ops->readdir(&s->ctx, dir, dirent);
}
static void v9fs_do_seekdir(V9fsState *s, DIR *dir, off_t off)
@@ -1038,8 +1038,7 @@ static int stat_to_v9stat(V9fsState *s, V9fsString *name,
if (v9stat->mode& P9_STAT_MODE_SYMLINK) {
err = v9fs_do_readlink(s, name,&v9stat->extension);
- if (err == -1) {
- err = -errno;
+ if (err< 0) {
return err;
}
v9stat->extension.data[err] = 0;
@@ -1234,8 +1233,7 @@ out:
static void v9fs_stat_post_lstat(V9fsState *s, V9fsStatState *vs, int err)
{
- if (err == -1) {
- err = -errno;
+ if (err< 0) {
goto out;
}
@@ -1263,9 +1261,8 @@ static void v9fs_stat(V9fsState *s, V9fsPDU *pdu)
vs->offset = 7;
memset(&vs->v9stat, 0, sizeof(vs->v9stat));
-
pdu_unmarshal(vs->pdu, vs->offset, "d",&fid);
-
+
vs->fidp = lookup_fid(s, fid);
if (vs->fidp == NULL) {
err = -ENOENT;
@@ -1285,8 +1282,7 @@ out:
static void v9fs_getattr_post_lstat(V9fsState *s, V9fsStatStateDotl *vs,
int err)
{
- if (err == -1) {
- err = -errno;
+ if (err< 0) {
goto out;
}
@@ -1348,8 +1344,7 @@ out:
static void v9fs_setattr_post_truncate(V9fsState *s, V9fsSetattrState *vs,
int err)
{
- if (err == -1) {
- err = -errno;
+ if (err< 0) {
goto out;
}
err = vs->offset;
@@ -1361,8 +1356,7 @@ out:
static void v9fs_setattr_post_chown(V9fsState *s, V9fsSetattrState *vs, int
err)
{
- if (err == -1) {
- err = -errno;
+ if (err< 0) {
goto out;
}
@@ -1380,8 +1374,7 @@ out:
static void v9fs_setattr_post_utimensat(V9fsState *s, V9fsSetattrState *vs,
int err)
{
- if (err == -1) {
- err = -errno;
+ if (err< 0) {
goto out;
}
@@ -1410,8 +1403,7 @@ out:
static void v9fs_setattr_post_chmod(V9fsState *s, V9fsSetattrState *vs, int
err)
{
- if (err == -1) {
- err = -errno;
+ if (err< 0) {
goto out;
}
@@ -1506,7 +1498,7 @@ static void v9fs_walk_marshal(V9fsWalkState *vs)
static void v9fs_walk_post_newfid_lstat(V9fsState *s, V9fsWalkState *vs,
int err)
{
- if (err == -1) {
+ if (err< 0) {
free_fid(s, vs->newfidp->fid);
v9fs_string_free(&vs->path);
err = -ENOENT;
@@ -1536,7 +1528,7 @@ out:
static void v9fs_walk_post_oldfid_lstat(V9fsState *s, V9fsWalkState *vs,
int err)
{
- if (err == -1) {
+ if (err< 0) {
v9fs_string_free(&vs->path);
err = -ENOENT;
goto out;
@@ -1665,8 +1657,7 @@ static int32_t get_iounit(V9fsState *s, V9fsString *name)
static void v9fs_open_post_opendir(V9fsState *s, V9fsOpenState *vs, int err)
{
- if (vs->fidp->fs.dir == NULL) {
- err = -errno;
+ if (err< 0) {
goto out;
}
vs->fidp->fid_type = P9_FID_DIR;
@@ -1689,8 +1680,7 @@ static void v9fs_open_post_getiounit(V9fsState *s,
V9fsOpenState *vs)
static void v9fs_open_post_open(V9fsState *s, V9fsOpenState *vs, int err)
{
- if (vs->fidp->fs.fd == -1) {
- err = -errno;
+ if (vs->fidp->fs.fd< 0) {
goto out;
}
vs->fidp->fid_type = P9_FID_FILE;
@@ -1707,14 +1697,13 @@ static void v9fs_open_post_lstat(V9fsState *s,
V9fsOpenState *vs, int err)
int flags;
if (err) {
- err = -errno;
goto out;
}
stat_to_qid(&vs->stbuf,&vs->qid);
if (S_ISDIR(vs->stbuf.st_mode)) {
- vs->fidp->fs.dir = v9fs_do_opendir(s,&vs->fidp->path);
+ err = v9fs_do_opendir(s,&vs->fidp->path,&vs->fidp->fs.dir);
v9fs_open_post_opendir(s, vs, err);
} else {
if (s->proto_version == V9FS_PROTO_2000L) {
@@ -1778,7 +1767,6 @@ static void v9fs_post_lcreate(V9fsState *s,
V9fsLcreateState *vs, int err)
err = vs->offset;
} else {
vs->fidp->fid_type = P9_FID_NONE;
- err = -errno;
if (vs->fidp->fs.fd> 0) {
close(vs->fidp->fs.fd);
}
@@ -1794,7 +1782,6 @@ static void v9fs_lcreate_post_get_iounit(V9fsState *s,
V9fsLcreateState *vs,
int err)
{
if (err) {
- err = -errno;
goto out;
}
err = v9fs_do_lstat(s,&vs->fullname,&vs->stbuf);
@@ -1806,8 +1793,7 @@ out:
static void v9fs_lcreate_post_do_open2(V9fsState *s, V9fsLcreateState *vs,
int err)
{
- if (vs->fidp->fs.fd == -1) {
- err = -errno;
+ if (vs->fidp->fs.fd< 0) {
goto out;
}
vs->fidp->fid_type = P9_FID_FILE;
@@ -1860,9 +1846,6 @@ out:
static void v9fs_post_do_fsync(V9fsState *s, V9fsPDU *pdu, int err)
{
- if (err == -1) {
- err = -errno;
- }
complete_pdu(s, pdu, err);
}
@@ -1932,7 +1915,6 @@ static void v9fs_read_post_dir_lstat(V9fsState *s,
V9fsReadState *vs,
ssize_t err)
{
if (err) {
- err = -errno;
goto out;
}
err = stat_to_v9stat(s,&vs->name,&vs->stbuf,&vs->v9stat);
@@ -1952,7 +1934,7 @@ static void v9fs_read_post_dir_lstat(V9fsState *s,
V9fsReadState *vs,
v9fs_stat_free(&vs->v9stat);
v9fs_string_free(&vs->name);
vs->dir_pos = vs->dent->d_off;
- vs->dent = v9fs_do_readdir(s, vs->fidp->fs.dir);
+ err = v9fs_do_readdir(s, vs->fidp->fs.dir,&vs->dent);
v9fs_read_post_readdir(s, vs, err);
return;
out:
@@ -1984,7 +1966,7 @@ static void v9fs_read_post_readdir(V9fsState *s,
V9fsReadState *vs, ssize_t err)
static void v9fs_read_post_telldir(V9fsState *s, V9fsReadState *vs, ssize_t
err)
{
- vs->dent = v9fs_do_readdir(s, vs->fidp->fs.dir);
+ v9fs_do_readdir(s, vs->fidp->fs.dir,&vs->dent);
v9fs_read_post_readdir(s, vs, err);
return;
}
@@ -2000,8 +1982,6 @@ static void v9fs_read_post_rewinddir(V9fsState *s,
V9fsReadState *vs,
static void v9fs_read_post_preadv(V9fsState *s, V9fsReadState *vs, ssize_t
err)
{
if (err< 0) {
- /* IO error return the error */
- err = -errno;
goto out;
}
vs->total += vs->len;
@@ -2017,9 +1997,6 @@ static void v9fs_read_post_preadv(V9fsState *s,
V9fsReadState *vs, ssize_t err)
vs->off += vs->len;
}
} while (vs->len == -1&& errno == EINTR);
- if (vs->len == -1) {
- err = -errno;
- }
v9fs_read_post_preadv(s, vs, err);
return;
}
@@ -2170,7 +2147,7 @@ static void v9fs_readdir_post_readdir(V9fsState *s,
V9fsReadDirState *vs)
vs->count += len;
v9fs_string_free(&vs->name);
vs->saved_dir_pos = vs->dent->d_off;
- vs->dent = v9fs_do_readdir(s, vs->fidp->fs.dir);
+ v9fs_do_readdir(s, vs->fidp->fs.dir,&vs->dent);
v9fs_readdir_post_readdir(s, vs);
return;
}
@@ -2184,7 +2161,7 @@ static void v9fs_readdir_post_readdir(V9fsState *s,
V9fsReadDirState *vs)
static void v9fs_readdir_post_telldir(V9fsState *s, V9fsReadDirState *vs)
{
- vs->dent = v9fs_do_readdir(s, vs->fidp->fs.dir);
+ v9fs_do_readdir(s, vs->fidp->fs.dir,&vs->dent);
v9fs_readdir_post_readdir(s, vs);
return;
}
@@ -2236,8 +2213,6 @@ static void v9fs_write_post_pwritev(V9fsState *s,
V9fsWriteState *vs,
ssize_t err)
{
if (err< 0) {
- /* IO error return the error */
- err = -errno;
goto out;
}
vs->total += vs->len;
@@ -2253,9 +2228,6 @@ static void v9fs_write_post_pwritev(V9fsState *s,
V9fsWriteState *vs,
vs->off += vs->len;
}
} while (vs->len == -1&& errno == EINTR);
- if (vs->len == -1) {
- err = -errno;
- }
v9fs_write_post_pwritev(s, vs, err);
return;
}
@@ -2394,18 +2366,12 @@ static void v9fs_post_create(V9fsState *s,
V9fsCreateState *vs, int err)
static void v9fs_create_post_perms(V9fsState *s, V9fsCreateState *vs, int err)
{
- if (err) {
- err = -errno;
- }
v9fs_post_create(s, vs, err);
}
static void v9fs_create_post_opendir(V9fsState *s, V9fsCreateState *vs,
int err)
{
- if (!vs->fidp->fs.dir) {
- err = -errno;
- }
vs->fidp->fid_type = P9_FID_DIR;
v9fs_post_create(s, vs, err);
}
@@ -2414,11 +2380,10 @@ static void v9fs_create_post_dir_lstat(V9fsState *s,
V9fsCreateState *vs,
int err)
{
if (err) {
- err = -errno;
goto out;
}
- vs->fidp->fs.dir = v9fs_do_opendir(s,&vs->fullname);
+ err = v9fs_do_opendir(s,&vs->fullname,&vs->fidp->fs.dir);
v9fs_create_post_opendir(s, vs, err);
return;
@@ -2429,7 +2394,6 @@ out:
static void v9fs_create_post_mkdir(V9fsState *s, V9fsCreateState *vs, int err)
{
if (err) {
- err = -errno;
goto out;
}
@@ -2446,7 +2410,6 @@ static void v9fs_create_post_fstat(V9fsState *s,
V9fsCreateState *vs, int err)
if (err) {
vs->fidp->fid_type = P9_FID_NONE;
close(vs->fidp->fs.fd);
- err = -errno;
}
v9fs_post_create(s, vs, err);
return;
@@ -2455,7 +2418,6 @@ static void v9fs_create_post_fstat(V9fsState *s,
V9fsCreateState *vs, int err)
static void v9fs_create_post_open2(V9fsState *s, V9fsCreateState *vs, int err)
{
if (vs->fidp->fs.fd == -1) {
- err = -errno;
goto out;
}
vs->fidp->fid_type = P9_FID_FILE;
@@ -2472,8 +2434,7 @@ out:
static void v9fs_create_post_lstat(V9fsState *s, V9fsCreateState *vs, int err)
{
- if (err == 0 || errno != ENOENT) {
- err = -errno;
+ if (err == 0 || err != -ENOENT) {
goto out;
}
@@ -2501,7 +2462,6 @@ static void v9fs_create_post_lstat(V9fsState *s,
V9fsCreateState *vs, int err)
if (sscanf(vs->extension.data, "%c %u %u",&ctype,&major,
&minor) != 3) {
- err = -errno;
v9fs_post_create(s, vs, err);
}
@@ -2583,8 +2543,6 @@ static void v9fs_post_symlink(V9fsState *s,
V9fsSymlinkState *vs, int err)
stat_to_qid(&vs->stbuf,&vs->qid);
vs->offset += pdu_marshal(vs->pdu, vs->offset, "Q",&vs->qid);
err = vs->offset;
- } else {
- err = -errno;
}
complete_pdu(s, vs->pdu, err);
v9fs_string_free(&vs->name);
@@ -2660,22 +2618,17 @@ static void v9fs_link(V9fsState *s, V9fsPDU *pdu)
dfidp = lookup_fid(s, dfid);
if (dfidp == NULL) {
- err = -errno;
goto out;
}
oldfidp = lookup_fid(s, oldfid);
if (oldfidp == NULL) {
- err = -errno;
goto out;
}
v9fs_string_sprintf(&fullname, "%s/%s", dfidp->path.data, name.data);
err = offset;
err = v9fs_do_link(s,&oldfidp->path,&fullname);
- if (err) {
- err = -errno;
- }
v9fs_string_free(&fullname);
out:
@@ -2686,9 +2639,7 @@ out:
static void v9fs_remove_post_remove(V9fsState *s, V9fsRemoveState *vs,
int err)
{
- if (err< 0) {
- err = -errno;
- } else {
+ if (err == 0) {
err = vs->offset;
}
@@ -2746,9 +2697,7 @@ static void v9fs_wstat_post_rename(V9fsState *s,
V9fsWstatState *vs, int err)
goto out;
}
if (vs->v9stat.length != -1) {
- if (v9fs_do_truncate(s,&vs->fidp->path, vs->v9stat.length)< 0) {
- err = -errno;
- }
+ err = v9fs_do_truncate(s,&vs->fidp->path, vs->v9stat.length);
}
v9fs_wstat_post_truncate(s, vs, err);
return;
@@ -2800,9 +2749,8 @@ static int v9fs_complete_rename(V9fsState *s,
V9fsRenameState *vs)
vs->name.size = strlen(new_name);
if (strcmp(new_name, vs->fidp->path.data) != 0) {
- if (v9fs_do_rename(s,&vs->fidp->path,&vs->name)) {
- err = -errno;
- } else {
+ err = v9fs_do_rename(s,&vs->fidp->path,&vs->name);
+ if (!err) {
V9fsFidState *fidp;
/*
* Fixup fid's pointing to the old name to
@@ -2908,10 +2856,8 @@ static void v9fs_wstat_post_utime(V9fsState *s,
V9fsWstatState *vs, int err)
}
if (vs->v9stat.n_gid != -1 || vs->v9stat.n_uid != -1) {
- if (v9fs_do_chown(s,&vs->fidp->path, vs->v9stat.n_uid,
- vs->v9stat.n_gid)) {
- err = -errno;
- }
+ err = v9fs_do_chown(s,&vs->fidp->path, vs->v9stat.n_uid,
+ vs->v9stat.n_gid);
}
v9fs_wstat_post_chown(s, vs, err);
return;
@@ -2943,9 +2889,7 @@ static void v9fs_wstat_post_chmod(V9fsState *s,
V9fsWstatState *vs, int err)
times[1].tv_nsec = UTIME_OMIT;
}
- if (v9fs_do_utimensat(s,&vs->fidp->path, times)) {
- err = -errno;
- }
+ err = v9fs_do_utimensat(s,&vs->fidp->path, times);
}
v9fs_wstat_post_utime(s, vs, err);
@@ -2959,9 +2903,6 @@ out:
static void v9fs_wstat_post_fsync(V9fsState *s, V9fsWstatState *vs, int err)
{
- if (err == -1) {
- err = -errno;
- }
v9fs_stat_free(&vs->v9stat);
complete_pdu(s, vs->pdu, err);
qemu_free(vs);
@@ -2971,8 +2912,7 @@ static void v9fs_wstat_post_lstat(V9fsState *s,
V9fsWstatState *vs, int err)
{
uint32_t v9_mode;
- if (err == -1) {
- err = -errno;
+ if (err< 0) {
goto out;
}
@@ -2985,10 +2925,8 @@ static void v9fs_wstat_post_lstat(V9fsState *s,
V9fsWstatState *vs, int err)
goto out;
}
- if (v9fs_do_chmod(s,&vs->fidp->path, v9mode_to_mode(vs->v9stat.mode,
-&vs->v9stat.extension))) {
- err = -errno;
- }
+ err = v9fs_do_chmod(s,&vs->fidp->path, v9mode_to_mode(vs->v9stat.mode,
+&vs->v9stat.extension));
v9fs_wstat_post_chmod(s, vs, err);
return;
@@ -3049,7 +2987,6 @@ static void v9fs_statfs_post_statfs(V9fsState *s,
V9fsStatfsState *vs, int err)
int32_t bsize_factor;
if (err) {
- err = -errno;
goto out;
}
@@ -3119,8 +3056,7 @@ out:
static void v9fs_mknod_post_lstat(V9fsState *s, V9fsMkState *vs, int err)
{
- if (err == -1) {
- err = -errno;
+ if (err< 0) {
goto out;
}
@@ -3136,8 +3072,7 @@ out:
static void v9fs_mknod_post_mknod(V9fsState *s, V9fsMkState *vs, int err)
{
- if (err == -1) {
- err = -errno;
+ if (err< 0) {
goto out;
}
@@ -3234,7 +3169,6 @@ static void v9fs_lock(V9fsState *s, V9fsPDU *pdu)
goto out;
}
if (err< 0) {
- err = -errno;
goto out;
}
vs->status = P9_LOCK_SUCCESS;
@@ -3280,7 +3214,6 @@ static void v9fs_getlock(V9fsState *s, V9fsPDU *pdu)
goto out;
}
if (err< 0) {
- err = -errno;
goto out;
}
vs->glock->type = F_UNLCK;
@@ -3295,8 +3228,7 @@ out:
static void v9fs_mkdir_post_lstat(V9fsState *s, V9fsMkState *vs, int err)
{
- if (err == -1) {
- err = -errno;
+ if (err< 0) {
goto out;
}
@@ -3312,8 +3244,7 @@ out:
static void v9fs_mkdir_post_mkdir(V9fsState *s, V9fsMkState *vs, int err)
{
- if (err == -1) {
- err = -errno;
+ if (err< 0) {
goto out;
}
@@ -3366,7 +3297,6 @@ static void v9fs_post_xattr_getvalue(V9fsState *s,
V9fsXattrState *vs, int err)
{
if (err< 0) {
- err = -errno;
free_fid(s, vs->xattr_fidp->fid);
goto out;
}
@@ -3382,7 +3312,6 @@ out:
static void v9fs_post_xattr_check(V9fsState *s, V9fsXattrState *vs, ssize_t
err)
{
if (err< 0) {
- err = -errno;
free_fid(s, vs->xattr_fidp->fid);
goto out;
}
@@ -3410,7 +3339,6 @@ static void v9fs_post_lxattr_getvalue(V9fsState *s,
V9fsXattrState *vs, int err)
{
if (err< 0) {
- err = -errno;
free_fid(s, vs->xattr_fidp->fid);
goto out;
}
@@ -3427,7 +3355,6 @@ static void v9fs_post_lxattr_check(V9fsState *s,
V9fsXattrState *vs, ssize_t err)
{
if (err< 0) {
- err = -errno;
free_fid(s, vs->xattr_fidp->fid);
goto out;
}
@@ -3548,7 +3475,6 @@ static void v9fs_readlink_post_readlink(V9fsState *s,
V9fsReadLinkState *vs,
int err)
{
if (err< 0) {
- err = -errno;
goto out;
}
vs->offset += pdu_marshal(vs->pdu, vs->offset, "s",&vs->target);