Branch data Line data Source code
1 : : /*
2 : : * Copyright (C) 2006 Red Hat, Inc. All Rights Reserved.
3 : : * Written by David Howells (dhowells@redhat.com)
4 : : */
5 : :
6 : : #include <linux/nfs_fs.h>
7 : : #include "nfs4_fs.h"
8 : : #include "internal.h"
9 : :
10 : : #define NFSDBG_FACILITY NFSDBG_CLIENT
11 : :
12 : 0 : int nfs4_get_rootfh(struct nfs_server *server, struct nfs_fh *mntfh, bool auth_probe)
13 : : {
14 : : struct nfs_fsinfo fsinfo;
15 : : int ret = -ENOMEM;
16 : :
17 : : dprintk("--> nfs4_get_rootfh()\n");
18 : :
19 : 0 : fsinfo.fattr = nfs_alloc_fattr();
20 [ # # ]: 0 : if (fsinfo.fattr == NULL)
21 : : goto out;
22 : :
23 : : /* Start by getting the root filehandle from the server */
24 : 0 : ret = nfs4_proc_get_rootfh(server, mntfh, &fsinfo, auth_probe);
25 [ # # ]: 0 : if (ret < 0) {
26 : : dprintk("nfs4_get_rootfh: getroot error = %d\n", -ret);
27 : : goto out;
28 : : }
29 : :
30 [ # # ]: 0 : if (!(fsinfo.fattr->valid & NFS_ATTR_FATTR_TYPE)
31 [ # # ]: 0 : || !S_ISDIR(fsinfo.fattr->mode)) {
32 : 0 : printk(KERN_ERR "nfs4_get_rootfh:"
33 : : " getroot encountered non-directory\n");
34 : : ret = -ENOTDIR;
35 : 0 : goto out;
36 : : }
37 : :
38 [ # # ]: 0 : if (fsinfo.fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL) {
39 : 0 : printk(KERN_ERR "nfs4_get_rootfh:"
40 : : " getroot obtained referral\n");
41 : : ret = -EREMOTE;
42 : 0 : goto out;
43 : : }
44 : :
45 : 0 : memcpy(&server->fsid, &fsinfo.fattr->fsid, sizeof(server->fsid));
46 : : out:
47 : 0 : nfs_free_fattr(fsinfo.fattr);
48 : : dprintk("<-- nfs4_get_rootfh() = %d\n", ret);
49 : 0 : return ret;
50 : : }
|