linux/fs/nfs/nfs4getroot.c
<<
>>
Prefs
   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
   9#define NFSDBG_FACILITY         NFSDBG_CLIENT
  10
  11int nfs4_get_rootfh(struct nfs_server *server, struct nfs_fh *mntfh)
  12{
  13        struct nfs_fsinfo fsinfo;
  14        int ret = -ENOMEM;
  15
  16        dprintk("--> nfs4_get_rootfh()\n");
  17
  18        fsinfo.fattr = nfs_alloc_fattr();
  19        if (fsinfo.fattr == NULL)
  20                goto out;
  21
  22        /* Start by getting the root filehandle from the server */
  23        ret = nfs4_proc_get_rootfh(server, mntfh, &fsinfo);
  24        if (ret < 0) {
  25                dprintk("nfs4_get_rootfh: getroot error = %d\n", -ret);
  26                goto out;
  27        }
  28
  29        if (!(fsinfo.fattr->valid & NFS_ATTR_FATTR_TYPE)
  30                        || !S_ISDIR(fsinfo.fattr->mode)) {
  31                printk(KERN_ERR "nfs4_get_rootfh:"
  32                       " getroot encountered non-directory\n");
  33                ret = -ENOTDIR;
  34                goto out;
  35        }
  36
  37        if (fsinfo.fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL) {
  38                printk(KERN_ERR "nfs4_get_rootfh:"
  39                       " getroot obtained referral\n");
  40                ret = -EREMOTE;
  41                goto out;
  42        }
  43
  44        memcpy(&server->fsid, &fsinfo.fattr->fsid, sizeof(server->fsid));
  45out:
  46        nfs_free_fattr(fsinfo.fattr);
  47        dprintk("<-- nfs4_get_rootfh() = %d\n", ret);
  48        return ret;
  49}
  50
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.