Merge to Fedora kernel-2.6.18-1.2255_FC5-vs2.0.2.2-rc9 patched with stable patch...
[linux-2.6.git] / fs / nfs / mount_clnt.c
index a2ddc6c..ed88119 100644 (file)
@@ -31,7 +31,7 @@
 
 static struct rpc_clnt *       mnt_create(char *, struct sockaddr_in *,
                                                                int, int);
-struct rpc_program             mnt_program;
+static struct rpc_program      mnt_program;
 
 struct mnt_fhstatus {
        unsigned int            status;
@@ -49,9 +49,12 @@ nfsroot_mount(struct sockaddr_in *addr, char *path, struct nfs_fh *fh,
        struct mnt_fhstatus     result = {
                .fh             = fh
        };
+       struct rpc_message msg  = {
+               .rpc_argp       = path,
+               .rpc_resp       = &result,
+       };
        char                    hostname[32];
        int                     status;
-       int                     call;
 
        dprintk("NFS:      nfs_mount(%08x:%s)\n",
                        (unsigned)ntohl(addr->sin_addr.s_addr), path);
@@ -61,8 +64,12 @@ nfsroot_mount(struct sockaddr_in *addr, char *path, struct nfs_fh *fh,
        if (IS_ERR(mnt_clnt))
                return PTR_ERR(mnt_clnt);
 
-       call = (version == NFS_MNT3_VERSION) ? MOUNTPROC3_MNT : MNTPROC_MNT;
-       status = rpc_call(mnt_clnt, call, path, &result, 0);
+       if (version == NFS_MNT3_VERSION)
+               msg.rpc_proc = &mnt_clnt->cl_procinfo[MOUNTPROC3_MNT];
+       else
+               msg.rpc_proc = &mnt_clnt->cl_procinfo[MNTPROC_MNT];
+
+       status = rpc_call_sync(mnt_clnt, &msg, 0);
        return status < 0? status : (result.status? -EACCES : 0);
 }
 
@@ -80,13 +87,11 @@ mnt_create(char *hostname, struct sockaddr_in *srvaddr, int version,
        clnt = rpc_create_client(xprt, hostname,
                                &mnt_program, version,
                                RPC_AUTH_UNIX);
-       if (IS_ERR(clnt)) {
-               xprt_destroy(xprt);
-       } else {
+       if (!IS_ERR(clnt)) {
                clnt->cl_softrtry = 1;
-               clnt->cl_chatty   = 1;
                clnt->cl_oneshot  = 1;
                clnt->cl_intr = 1;
+               clnt->cl_tagxid = 1;
        }
        return clnt;
 }
@@ -108,7 +113,6 @@ xdr_decode_fhstatus(struct rpc_rqst *req, u32 *p, struct mnt_fhstatus *res)
 {
        struct nfs_fh *fh = res->fh;
 
-       memset((void *)fh, 0, sizeof(*fh));
        if ((res->status = ntohl(*p++)) == 0) {
                fh->size = NFS2_FHSIZE;
                memcpy(fh->data, p, NFS2_FHSIZE);
@@ -121,7 +125,6 @@ xdr_decode_fhstatus3(struct rpc_rqst *req, u32 *p, struct mnt_fhstatus *res)
 {
        struct nfs_fh *fh = res->fh;
 
-       memset((void *)fh, 0, sizeof(*fh));
        if ((res->status = ntohl(*p++)) == 0) {
                int size = ntohl(*p++);
                if (size <= NFS3_FHSIZE) {
@@ -142,6 +145,8 @@ static struct rpc_procinfo  mnt_procedures[] = {
          .p_encode             = (kxdrproc_t) xdr_encode_dirpath,      
          .p_decode             = (kxdrproc_t) xdr_decode_fhstatus,
          .p_bufsiz             = MNT_dirpath_sz << 2,
+         .p_statidx            = MNTPROC_MNT,
+         .p_name               = "MOUNT",
        },
 };
 
@@ -151,6 +156,8 @@ static struct rpc_procinfo mnt3_procedures[] = {
          .p_encode             = (kxdrproc_t) xdr_encode_dirpath,
          .p_decode             = (kxdrproc_t) xdr_decode_fhstatus3,
          .p_bufsiz             = MNT_dirpath_sz << 2,
+         .p_statidx            = MOUNTPROC3_MNT,
+         .p_name               = "MOUNT",
        },
 };
 
@@ -176,10 +183,10 @@ static struct rpc_version *       mnt_version[] = {
 
 static struct rpc_stat         mnt_stats;
 
-struct rpc_program     mnt_program = {
+static struct rpc_program      mnt_program = {
        .name           = "mount",
        .number         = NFS_MNT_PROGRAM,
-       .nrvers         = sizeof(mnt_version)/sizeof(mnt_version[0]),
+       .nrvers         = ARRAY_SIZE(mnt_version),
        .version        = mnt_version,
        .stats          = &mnt_stats,
 };