]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - fs/nfs/mount_clnt.c
Merge tag 'v2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / fs / nfs / mount_clnt.c
index 4f981f1f668925cba6bebe6ed4cf485da6a56dbb..d4c2d6b7507e791044df2837c1d0803699a2a518 100644 (file)
@@ -236,10 +236,8 @@ void nfs_umount(const struct nfs_mount_request *info)
                .authflavor     = RPC_AUTH_UNIX,
                .flags          = RPC_CLNT_CREATE_NOPING,
        };
-       struct mountres result;
        struct rpc_message msg  = {
                .rpc_argp       = info->dirpath,
-               .rpc_resp       = &result,
        };
        struct rpc_clnt *clnt;
        int status;
@@ -248,7 +246,7 @@ void nfs_umount(const struct nfs_mount_request *info)
                args.flags |= RPC_CLNT_CREATE_NONPRIVPORT;
 
        clnt = rpc_create(&args);
-       if (unlikely(IS_ERR(clnt)))
+       if (IS_ERR(clnt))
                goto out_clnt_err;
 
        dprintk("NFS: sending UMNT request for %s:%s\n",
@@ -280,29 +278,20 @@ out_call_err:
  * XDR encode/decode functions for MOUNT
  */
 
-static int encode_mntdirpath(struct xdr_stream *xdr, const char *pathname)
+static void encode_mntdirpath(struct xdr_stream *xdr, const char *pathname)
 {
        const u32 pathname_len = strlen(pathname);
        __be32 *p;
 
-       if (unlikely(pathname_len > MNTPATHLEN))
-               return -EIO;
-
-       p = xdr_reserve_space(xdr, sizeof(u32) + pathname_len);
-       if (unlikely(p == NULL))
-               return -EIO;
+       BUG_ON(pathname_len > MNTPATHLEN);
+       p = xdr_reserve_space(xdr, 4 + pathname_len);
        xdr_encode_opaque(p, pathname, pathname_len);
-
-       return 0;
 }
 
-static int mnt_enc_dirpath(struct rpc_rqst *req, __be32 *p,
-                          const char *dirpath)
+static void mnt_xdr_enc_dirpath(struct rpc_rqst *req, struct xdr_stream *xdr,
+                               const char *dirpath)
 {
-       struct xdr_stream xdr;
-
-       xdr_init_encode(&xdr, &req->rq_snd_buf, p);
-       return encode_mntdirpath(&xdr, dirpath);
+       encode_mntdirpath(xdr, dirpath);
 }
 
 /*
@@ -320,10 +309,10 @@ static int decode_status(struct xdr_stream *xdr, struct mountres *res)
        u32 status;
        __be32 *p;
 
-       p = xdr_inline_decode(xdr, sizeof(status));
+       p = xdr_inline_decode(xdr, 4);
        if (unlikely(p == NULL))
                return -EIO;
-       status = ntohl(*p);
+       status = be32_to_cpup(p);
 
        for (i = 0; i < ARRAY_SIZE(mnt_errtbl); i++) {
                if (mnt_errtbl[i].status == status) {
@@ -351,18 +340,16 @@ static int decode_fhandle(struct xdr_stream *xdr, struct mountres *res)
        return 0;
 }
 
-static int mnt_dec_mountres(struct rpc_rqst *req, __be32 *p,
-                           struct mountres *res)
+static int mnt_xdr_dec_mountres(struct rpc_rqst *req,
+                               struct xdr_stream *xdr,
+                               struct mountres *res)
 {
-       struct xdr_stream xdr;
        int status;
 
-       xdr_init_decode(&xdr, &req->rq_rcv_buf, p);
-
-       status = decode_status(&xdr, res);
+       status = decode_status(xdr, res);
        if (unlikely(status != 0 || res->errno != 0))
                return status;
-       return decode_fhandle(&xdr, res);
+       return decode_fhandle(xdr, res);
 }
 
 static int decode_fhs_status(struct xdr_stream *xdr, struct mountres *res)
@@ -371,10 +358,10 @@ static int decode_fhs_status(struct xdr_stream *xdr, struct mountres *res)
        u32 status;
        __be32 *p;
 
-       p = xdr_inline_decode(xdr, sizeof(status));
+       p = xdr_inline_decode(xdr, 4);
        if (unlikely(p == NULL))
                return -EIO;
-       status = ntohl(*p);
+       status = be32_to_cpup(p);
 
        for (i = 0; i < ARRAY_SIZE(mnt3_errtbl); i++) {
                if (mnt3_errtbl[i].status == status) {
@@ -394,11 +381,11 @@ static int decode_fhandle3(struct xdr_stream *xdr, struct mountres *res)
        u32 size;
        __be32 *p;
 
-       p = xdr_inline_decode(xdr, sizeof(size));
+       p = xdr_inline_decode(xdr, 4);
        if (unlikely(p == NULL))
                return -EIO;
 
-       size = ntohl(*p++);
+       size = be32_to_cpup(p);
        if (size > NFS3_FHSIZE || size == 0)
                return -EIO;
 
@@ -421,15 +408,15 @@ static int decode_auth_flavors(struct xdr_stream *xdr, struct mountres *res)
        if (*count == 0)
                return 0;
 
-       p = xdr_inline_decode(xdr, sizeof(entries));
+       p = xdr_inline_decode(xdr, 4);
        if (unlikely(p == NULL))
                return -EIO;
-       entries = ntohl(*p);
+       entries = be32_to_cpup(p);
        dprintk("NFS: received %u auth flavors\n", entries);
        if (entries > NFS_MAX_SECFLAVORS)
                entries = NFS_MAX_SECFLAVORS;
 
-       p = xdr_inline_decode(xdr, sizeof(u32) * entries);
+       p = xdr_inline_decode(xdr, 4 * entries);
        if (unlikely(p == NULL))
                return -EIO;
 
@@ -437,7 +424,7 @@ static int decode_auth_flavors(struct xdr_stream *xdr, struct mountres *res)
                entries = *count;
 
        for (i = 0; i < entries; i++) {
-               flavors[i] = ntohl(*p++);
+               flavors[i] = be32_to_cpup(p++);
                dprintk("NFS:   auth flavor[%u]: %d\n", i, flavors[i]);
        }
        *count = i;
@@ -445,30 +432,28 @@ static int decode_auth_flavors(struct xdr_stream *xdr, struct mountres *res)
        return 0;
 }
 
-static int mnt_dec_mountres3(struct rpc_rqst *req, __be32 *p,
-                            struct mountres *res)
+static int mnt_xdr_dec_mountres3(struct rpc_rqst *req,
+                                struct xdr_stream *xdr,
+                                struct mountres *res)
 {
-       struct xdr_stream xdr;
        int status;
 
-       xdr_init_decode(&xdr, &req->rq_rcv_buf, p);
-
-       status = decode_fhs_status(&xdr, res);
+       status = decode_fhs_status(xdr, res);
        if (unlikely(status != 0 || res->errno != 0))
                return status;
-       status = decode_fhandle3(&xdr, res);
+       status = decode_fhandle3(xdr, res);
        if (unlikely(status != 0)) {
                res->errno = -EBADHANDLE;
                return 0;
        }
-       return decode_auth_flavors(&xdr, res);
+       return decode_auth_flavors(xdr, res);
 }
 
 static struct rpc_procinfo mnt_procedures[] = {
        [MOUNTPROC_MNT] = {
                .p_proc         = MOUNTPROC_MNT,
-               .p_encode       = (kxdrproc_t)mnt_enc_dirpath,
-               .p_decode       = (kxdrproc_t)mnt_dec_mountres,
+               .p_encode       = (kxdreproc_t)mnt_xdr_enc_dirpath,
+               .p_decode       = (kxdrdproc_t)mnt_xdr_dec_mountres,
                .p_arglen       = MNT_enc_dirpath_sz,
                .p_replen       = MNT_dec_mountres_sz,
                .p_statidx      = MOUNTPROC_MNT,
@@ -476,7 +461,7 @@ static struct rpc_procinfo mnt_procedures[] = {
        },
        [MOUNTPROC_UMNT] = {
                .p_proc         = MOUNTPROC_UMNT,
-               .p_encode       = (kxdrproc_t)mnt_enc_dirpath,
+               .p_encode       = (kxdreproc_t)mnt_xdr_enc_dirpath,
                .p_arglen       = MNT_enc_dirpath_sz,
                .p_statidx      = MOUNTPROC_UMNT,
                .p_name         = "UMOUNT",
@@ -486,8 +471,8 @@ static struct rpc_procinfo mnt_procedures[] = {
 static struct rpc_procinfo mnt3_procedures[] = {
        [MOUNTPROC3_MNT] = {
                .p_proc         = MOUNTPROC3_MNT,
-               .p_encode       = (kxdrproc_t)mnt_enc_dirpath,
-               .p_decode       = (kxdrproc_t)mnt_dec_mountres3,
+               .p_encode       = (kxdreproc_t)mnt_xdr_enc_dirpath,
+               .p_decode       = (kxdrdproc_t)mnt_xdr_dec_mountres3,
                .p_arglen       = MNT_enc_dirpath_sz,
                .p_replen       = MNT_dec_mountres3_sz,
                .p_statidx      = MOUNTPROC3_MNT,
@@ -495,7 +480,7 @@ static struct rpc_procinfo mnt3_procedures[] = {
        },
        [MOUNTPROC3_UMNT] = {
                .p_proc         = MOUNTPROC3_UMNT,
-               .p_encode       = (kxdrproc_t)mnt_enc_dirpath,
+               .p_encode       = (kxdreproc_t)mnt_xdr_enc_dirpath,
                .p_arglen       = MNT_enc_dirpath_sz,
                .p_statidx      = MOUNTPROC3_UMNT,
                .p_name         = "UMOUNT",