NFS: Replace nfsroot on-stack filehandle
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Mon, 19 Apr 2010 23:14:28 +0000 (19:14 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Fri, 14 May 2010 19:09:28 +0000 (15:09 -0400)
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/nfsroot.c

index 8c55b27..6bd19d8 100644 (file)
@@ -488,7 +488,6 @@ static int __init root_nfs_ports(void)
  */
 static int __init root_nfs_get_handle(void)
 {
-       struct nfs_fh fh;
        struct sockaddr_in sin;
        unsigned int auth_flav_len = 0;
        struct nfs_mount_request request = {
@@ -499,21 +498,24 @@ static int __init root_nfs_get_handle(void)
                                        NFS_MNT3_VERSION : NFS_MNT_VERSION,
                .protocol       = (nfs_data.flags & NFS_MOUNT_TCP) ?
                                        XPRT_TRANSPORT_TCP : XPRT_TRANSPORT_UDP,
-               .fh             = &fh,
                .auth_flav_len  = &auth_flav_len,
        };
-       int status;
+       int status = -ENOMEM;
 
+       request.fh = nfs_alloc_fhandle();
+       if (!request.fh)
+               goto out;
        set_sockaddr(&sin, servaddr, htons(mount_port));
        status = nfs_mount(&request);
        if (status < 0)
                printk(KERN_ERR "Root-NFS: Server returned error %d "
                                "while mounting %s\n", status, nfs_export_path);
        else {
-               nfs_data.root.size = fh.size;
-               memcpy(nfs_data.root.data, fh.data, fh.size);
+               nfs_data.root.size = request.fh->size;
+               memcpy(&nfs_data.root.data, request.fh->data, request.fh->size);
        }
-
+       nfs_free_fhandle(request.fh);
+out:
        return status;
 }