diff --git a/qtfs/include/req.h b/qtfs/include/req.h index 407faeffeaf9d56052aaca7a54a3a1e5e774a48d..0fc7462509d3c0486a96e0793c1e7097ce394908 100644 --- a/qtfs/include/req.h +++ b/qtfs/include/req.h @@ -165,6 +165,7 @@ struct qtreq_mount { }; struct qtrsp_mount { int ret; + int errno; }; struct qtreq_open { diff --git a/qtfs/qtfs/sb.c b/qtfs/qtfs/sb.c index 3bf1226e88045c648bec5a26ebbca47c1405e2cf..3e94a885c8b0e298025781a26de0fcd6544bfbc6 100644 --- a/qtfs/qtfs/sb.c +++ b/qtfs/qtfs/sb.c @@ -1636,6 +1636,7 @@ struct dentry *qtfs_fs_mount(struct file_system_type *fs_type, struct qtrsp_mount *rsp = NULL; struct dentry *ret; struct qtfs_fs_info *priv = NULL; + int errno; struct qtfs_conn_var_s *pvar = qtfs_conn_get_param(); if (!pvar) { qtfs_err("Failed to get qtfs sock var\n"); @@ -1646,9 +1647,10 @@ struct dentry *qtfs_fs_mount(struct file_system_type *fs_type, strlcpy(req->path, dev_name, PATH_MAX); rsp = qtfs_remote_run(pvar, QTFS_REQ_MOUNT, strlen(dev_name)); if (IS_ERR_OR_NULL(rsp) || rsp->ret != QTFS_OK) { - qtfs_err("qtfs fs mount failed, path:<%s> not exist at peer.\n", dev_name); + errno = rsp->errno; + qtfs_err("qtfs fs mount failed, path:<%s> errno:%d.\n", dev_name, errno); qtfs_conn_put_param(pvar); - return ERR_PTR(-ENOENT); + return (IS_ERR_VALUE((long)errno)) ? ERR_PTR(errno) : ERR_PTR(-EFAULT); } priv = (struct qtfs_fs_info *)kmalloc(sizeof(struct qtfs_fs_info), GFP_KERNEL); diff --git a/qtfs/qtfs_server/fsops.c b/qtfs/qtfs_server/fsops.c index 101ce05de2f011a609fe4d35c3d139c336cd1b38..fdadd390fb7202e944b84b76501252c640f7de68 100644 --- a/qtfs/qtfs_server/fsops.c +++ b/qtfs/qtfs_server/fsops.c @@ -249,19 +249,21 @@ static int handle_mount(struct qtserver_arg *arg) struct qtrsp_mount *rsp = (struct qtrsp_mount *)RSP(arg); if (!in_white_list(req->path, QTFS_WHITELIST_MOUNT)) { rsp->ret = QTFS_ERR; - return sizeof(rsp->ret); + rsp->errno = -EPERM; + return sizeof(rsp); } ret = kern_path(req->path, LOOKUP_DIRECTORY, &path); if (ret) { qtfs_err("handle mount path:%s kern_path failed, ret: %d.\n", req->path, ret); rsp->ret = QTFS_ERR; + rsp->errno = -EINVAL; } else { rsp->ret = QTFS_OK; qtfs_info("handle mount path:%s success.\n", req->path); path_put(&path); } - return sizeof(rsp->ret); + return sizeof(rsp); } int handle_open(struct qtserver_arg *arg)