linux/fs/nfs/nfs4getroot.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3* Copyright (C) 2006 Red Hat, Inc. All Rights Reserved.
   4* Written by David Howells (dhowells@redhat.com)
   5*/
   6
   7#include <linux/nfs_fs.h>
   8#include "nfs4_fs.h"
   9#include "internal.h"
  10
  11#define NFSDBG_FACILITY         NFSDBG_CLIENT
  12
  13int nfs4_get_rootfh(struct nfs_server *server, struct nfs_fh *mntfh, bool auth_probe)
  14{
  15        struct nfs_fsinfo fsinfo;
  16        int ret = -ENOMEM;
  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, auth_probe);
  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        memcpy(&server->fsid, &fsinfo.fattr->fsid, sizeof(server->fsid));
  38out:
  39        nfs_free_fattr(fsinfo.fattr);
  40        return ret;
  41}
  42