linux/drivers/staging/lustre/lustre/include/lustre_disk.h
<<
>>
Prefs
   1/*
   2 * GPL HEADER START
   3 *
   4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 only,
   8 * as published by the Free Software Foundation.
   9 *
  10 * This program is distributed in the hope that it will be useful, but
  11 * WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13 * General Public License version 2 for more details (a copy is included
  14 * in the LICENSE file that accompanied this code).
  15 *
  16 * You should have received a copy of the GNU General Public License
  17 * version 2 along with this program; If not, see
  18 * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
  19 *
  20 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
  21 * CA 95054 USA or visit www.sun.com if you need additional information or
  22 * have any questions.
  23 *
  24 * GPL HEADER END
  25 */
  26/*
  27 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
  28 * Use is subject to license terms.
  29 *
  30 * Copyright (c) 2011, 2012, Intel Corporation.
  31 */
  32/*
  33 * This file is part of Lustre, http://www.lustre.org/
  34 * Lustre is a trademark of Sun Microsystems, Inc.
  35 *
  36 * lustre/include/lustre_disk.h
  37 *
  38 * Lustre disk format definitions.
  39 *
  40 * Author: Nathan Rutman <nathan@clusterfs.com>
  41 */
  42
  43#ifndef _LUSTRE_DISK_H
  44#define _LUSTRE_DISK_H
  45
  46/** \defgroup disk disk
  47 *
  48 * @{
  49 */
  50
  51#include "../../include/linux/libcfs/libcfs.h"
  52#include "../../include/linux/lnet/types.h"
  53#include <linux/backing-dev.h>
  54
  55/****************** persistent mount data *********************/
  56
  57#define LDD_F_SV_TYPE_MDT   0x0001
  58#define LDD_F_SV_TYPE_OST   0x0002
  59#define LDD_F_SV_TYPE_MGS   0x0004
  60#define LDD_F_SV_TYPE_MASK (LDD_F_SV_TYPE_MDT  | \
  61                            LDD_F_SV_TYPE_OST  | \
  62                            LDD_F_SV_TYPE_MGS)
  63#define LDD_F_SV_ALL    0x0008
  64
  65/****************** mount command *********************/
  66
  67/* The lmd is only used internally by Lustre; mount simply passes
  68 * everything as string options
  69 */
  70
  71#define LMD_MAGIC    0xbdacbd03
  72#define LMD_PARAMS_MAXLEN       4096
  73
  74/* gleaned from the mount command - no persistent info here */
  75struct lustre_mount_data {
  76        __u32      lmd_magic;
  77        __u32      lmd_flags;    /* lustre mount flags */
  78        int     lmd_mgs_failnodes; /* mgs failover node count */
  79        int     lmd_exclude_count;
  80        int     lmd_recovery_time_soft;
  81        int     lmd_recovery_time_hard;
  82        char      *lmd_dev;        /* device name */
  83        char      *lmd_profile;    /* client only */
  84        char      *lmd_mgssec;  /* sptlrpc flavor to mgs */
  85        char      *lmd_opts;    /* lustre mount options (as opposed to
  86                                 * _device_ mount options)
  87                                 */
  88        char      *lmd_params;  /* lustre params */
  89        __u32     *lmd_exclude; /* array of OSTs to ignore */
  90        char    *lmd_mgs;       /* MGS nid */
  91        char    *lmd_osd_type;  /* OSD type */
  92};
  93
  94#define LMD_FLG_SERVER          0x0001  /* Mounting a server */
  95#define LMD_FLG_CLIENT          0x0002  /* Mounting a client */
  96#define LMD_FLG_ABORT_RECOV     0x0008  /* Abort recovery */
  97#define LMD_FLG_NOSVC           0x0010  /* Only start MGS/MGC for servers,
  98                                         * no other services
  99                                         */
 100#define LMD_FLG_NOMGS           0x0020  /* Only start target for servers,
 101                                         * reusing existing MGS services
 102                                         */
 103#define LMD_FLG_WRITECONF       0x0040  /* Rewrite config log */
 104#define LMD_FLG_NOIR            0x0080  /* NO imperative recovery */
 105#define LMD_FLG_NOSCRUB         0x0100  /* Do not trigger scrub automatically */
 106#define LMD_FLG_MGS             0x0200  /* Also start MGS along with server */
 107#define LMD_FLG_IAM             0x0400  /* IAM dir */
 108#define LMD_FLG_NO_PRIMNODE     0x0800  /* all nodes are service nodes */
 109#define LMD_FLG_VIRGIN          0x1000  /* the service registers first time */
 110#define LMD_FLG_UPDATE          0x2000  /* update parameters */
 111#define LMD_FLG_HSM             0x4000  /* Start coordinator */
 112
 113#define lmd_is_client(x) ((x)->lmd_flags & LMD_FLG_CLIENT)
 114
 115/****************** last_rcvd file *********************/
 116
 117/** version recovery epoch */
 118#define LR_EPOCH_BITS   32
 119#define lr_epoch(a) ((a) >> LR_EPOCH_BITS)
 120#define LR_EXPIRE_INTERVALS 16 /**< number of intervals to track transno */
 121#define ENOENT_VERSION 1 /** 'virtual' version of non-existent object */
 122
 123/****************** superblock additional info *********************/
 124
 125struct ll_sb_info;
 126
 127struct lustre_sb_info {
 128        int                    lsi_flags;
 129        struct obd_device       *lsi_mgc;     /* mgc obd */
 130        struct lustre_mount_data *lsi_lmd;     /* mount command info */
 131        struct ll_sb_info       *lsi_llsbi;   /* add'l client sbi info */
 132        struct dt_device         *lsi_dt_dev;  /* dt device to access disk fs*/
 133        struct vfsmount   *lsi_srv_mnt; /* the one server mount */
 134        atomic_t              lsi_mounts;  /* references to the srv_mnt */
 135        char                      lsi_svname[MTI_NAME_MAXLEN];
 136        char                      lsi_osd_obdname[64];
 137        char                      lsi_osd_uuid[64];
 138        struct obd_export        *lsi_osd_exp;
 139        char                      lsi_osd_type[16];
 140        char                      lsi_fstype[16];
 141        struct backing_dev_info   lsi_bdi;     /* each client mountpoint needs
 142                                                * own backing_dev_info
 143                                                */
 144};
 145
 146#define LSI_UMOUNT_FAILOVER           0x00200000
 147#define LSI_BDI_INITIALIZED           0x00400000
 148
 149#define     s2lsi(sb)   ((struct lustre_sb_info *)((sb)->s_fs_info))
 150#define     s2lsi_nocast(sb) ((sb)->s_fs_info)
 151
 152#define     get_profile_name(sb)   (s2lsi(sb)->lsi_lmd->lmd_profile)
 153#define     get_mount_flags(sb)    (s2lsi(sb)->lsi_lmd->lmd_flags)
 154#define     get_mntdev_name(sb)    (s2lsi(sb)->lsi_lmd->lmd_dev)
 155
 156/****************** mount lookup info *********************/
 157
 158struct lustre_mount_info {
 159        char             *lmi_name;
 160        struct super_block   *lmi_sb;
 161        struct vfsmount      *lmi_mnt;
 162        struct list_head            lmi_list_chain;
 163};
 164
 165/****************** prototypes *********************/
 166
 167/* obd_mount.c */
 168
 169int lustre_start_mgc(struct super_block *sb);
 170void lustre_register_client_fill_super(int (*cfs)(struct super_block *sb,
 171                                                  struct vfsmount *mnt));
 172void lustre_register_kill_super_cb(void (*cfs)(struct super_block *sb));
 173int lustre_common_put_super(struct super_block *sb);
 174
 175int mgc_fsname2resid(char *fsname, struct ldlm_res_id *res_id, int type);
 176
 177/** @} disk */
 178
 179#endif /* _LUSTRE_DISK_H */
 180