1d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* 2d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * GPL HEADER START 3d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 4d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 6d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * This program is free software; you can redistribute it and/or modify 7d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * it under the terms of the GNU General Public License version 2 only, 8d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * as published by the Free Software Foundation. 9d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 10d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * This program is distributed in the hope that it will be useful, but 11d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * WITHOUT ANY WARRANTY; without even the implied warranty of 12d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * General Public License version 2 for more details (a copy is included 14d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * in the LICENSE file that accompanied this code). 15d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 16d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * You should have received a copy of the GNU General Public License 17d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * version 2 along with this program; If not, see 18d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf 19d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 20d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 21d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * CA 95054 USA or visit www.sun.com if you need additional information or 22d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * have any questions. 23d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 24d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * GPL HEADER END 25d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao */ 26d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* 27d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. 28d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Use is subject to license terms. 29d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 30d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Copyright (c) 2011, 2012, Intel Corporation. 31d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao */ 32d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* 33d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * This file is part of Lustre, http://www.lustre.org/ 34d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Lustre is a trademark of Sun Microsystems, Inc. 35d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 36d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * lustre/include/lustre_disk.h 37d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 38d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Lustre disk format definitions. 39d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 40d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * Author: Nathan Rutman <nathan@clusterfs.com> 41d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao */ 42d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 43d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#ifndef _LUSTRE_DISK_H 44d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define _LUSTRE_DISK_H 45d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 46d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** \defgroup disk disk 47d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 48d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * @{ 49d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao */ 50d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 519fdaf8c0b92ab374f8501eb47855776afc928e45Greg Kroah-Hartman#include "../../include/linux/libcfs/libcfs.h" 529fdaf8c0b92ab374f8501eb47855776afc928e45Greg Kroah-Hartman#include "../../include/linux/lnet/types.h" 53ac550511ad4be446847be94f86708ca0d3e4691dPeng Tao#include <linux/backing-dev.h> 54d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 55d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/****************** on-disk files *********************/ 56d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 5799a92265bd61d7934542c5f398fd241c30287b70jcl#define MDT_LOGS_DIR "LOGS" /* COMPAT_146 */ 5899a92265bd61d7934542c5f398fd241c30287b70jcl#define MOUNT_CONFIGS_DIR "CONFIGS" 5999a92265bd61d7934542c5f398fd241c30287b70jcl#define CONFIGS_FILE "mountdata" 60d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** Persistent mount data are stored on the disk in this file. */ 6199a92265bd61d7934542c5f398fd241c30287b70jcl#define MOUNT_DATA_FILE MOUNT_CONFIGS_DIR"/"CONFIGS_FILE 6299a92265bd61d7934542c5f398fd241c30287b70jcl#define LAST_RCVD "last_rcvd" 6399a92265bd61d7934542c5f398fd241c30287b70jcl#define LOV_OBJID "lov_objid" 64d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LOV_OBJSEQ "lov_objseq" 6599a92265bd61d7934542c5f398fd241c30287b70jcl#define HEALTH_CHECK "health_check" 6699a92265bd61d7934542c5f398fd241c30287b70jcl#define CAPA_KEYS "capa_keys" 6799a92265bd61d7934542c5f398fd241c30287b70jcl#define CHANGELOG_USERS "changelog_users" 6899a92265bd61d7934542c5f398fd241c30287b70jcl#define MGS_NIDTBL_DIR "NIDTBL_VERSIONS" 6999a92265bd61d7934542c5f398fd241c30287b70jcl#define QMT_DIR "quota_master" 7099a92265bd61d7934542c5f398fd241c30287b70jcl#define QSD_DIR "quota_slave" 7199a92265bd61d7934542c5f398fd241c30287b70jcl#define HSM_ACTIONS "hsm_actions" 72d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 73d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/****************** persistent mount data *********************/ 74d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 75d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_SV_TYPE_MDT 0x0001 76d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_SV_TYPE_OST 0x0002 77d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_SV_TYPE_MGS 0x0004 78d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_SV_TYPE_MASK (LDD_F_SV_TYPE_MDT | \ 79d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LDD_F_SV_TYPE_OST | \ 80d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LDD_F_SV_TYPE_MGS) 81d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_SV_ALL 0x0008 82d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** need an index assignment */ 83d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_NEED_INDEX 0x0010 84d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** never registered */ 85d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_VIRGIN 0x0020 86d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** update the config logs for this server */ 87d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_UPDATE 0x0040 88d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** rewrite the LDD */ 89d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_REWRITE_LDD 0x0080 90d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** regenerate config logs for this fs or server */ 91d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_WRITECONF 0x0100 92d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** COMPAT_14 */ 93d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_UPGRADE14 0x0200 94d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** process as lctl conf_param */ 95d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_PARAM 0x0400 96d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** all nodes are specified as service nodes */ 97d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_NO_PRIMNODE 0x1000 98d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** IR enable flag */ 99d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_IR_CAPABLE 0x2000 100d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** the MGS refused to register the target. */ 101d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_ERROR 0x4000 1027d4bae456cb1b3a92fb2d26e56c948cf4f05c950Artem Blagodarenko/** process at lctl conf_param */ 1037d4bae456cb1b3a92fb2d26e56c948cf4f05c950Artem Blagodarenko#define LDD_F_PARAM2 0x8000 104d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 105d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* opc for target register */ 106d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_OPC_REG 0x10000000 107d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_OPC_UNREG 0x20000000 108d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_OPC_READY 0x40000000 109d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_OPC_MASK 0xf0000000 110d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 111d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_ONDISK_MASK (LDD_F_SV_TYPE_MASK) 112d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 113d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_F_MASK 0xFFFF 114d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 115d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoenum ldd_mount_type { 116d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LDD_MT_EXT3 = 0, 117d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LDD_MT_LDISKFS, 118d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LDD_MT_SMFS, 119d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LDD_MT_REISERFS, 120d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LDD_MT_LDISKFS2, 121d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LDD_MT_ZFS, 122d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LDD_MT_LAST 123d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao}; 124d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 125d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostatic inline char *mt_str(enum ldd_mount_type mt) 126d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 127d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao static char *mount_type_string[] = { 128d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao "ext3", 129d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao "ldiskfs", 130d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao "smfs", 131d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao "reiserfs", 132d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao "ldiskfs2", 133d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao "zfs", 134d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao }; 135d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return mount_type_string[mt]; 136d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 137d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 138d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostatic inline char *mt_type(enum ldd_mount_type mt) 139d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 140d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao static char *mount_type_string[] = { 141d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao "osd-ldiskfs", 142d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao "osd-ldiskfs", 143d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao "osd-smfs", 144d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao "osd-reiserfs", 145d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao "osd-ldiskfs", 146d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao "osd-zfs", 147d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao }; 148d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return mount_type_string[mt]; 149d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 150d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 151d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_INCOMPAT_SUPP 0 152d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_ROCOMPAT_SUPP 0 153d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 154d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LDD_MAGIC 0x1dd00001 155d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 156d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* On-disk configuration file. In host-endian order. */ 157d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostruct lustre_disk_data { 158d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 ldd_magic; 159d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 ldd_feature_compat; /* compatible feature flags */ 160d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 ldd_feature_rocompat;/* read-only compatible feature flags */ 161d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 ldd_feature_incompat;/* incompatible feature flags */ 162d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 163d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 ldd_config_ver; /* config rewrite count - not used */ 164d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 ldd_flags; /* LDD_SV_TYPE */ 165d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 ldd_svindex; /* server index (0001), must match 166d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao svname */ 167d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 ldd_mount_type; /* target fs type LDD_MT_* */ 168d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char ldd_fsname[64]; /* filesystem this server is part of, 169d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao MTI_NAME_MAXLEN */ 170d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char ldd_svname[64]; /* this server's name (lustre-mdt0001)*/ 171d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u8 ldd_uuid[40]; /* server UUID (COMPAT_146) */ 172d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 173d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/*200*/ char ldd_userdata[1024 - 200]; /* arbitrary user string */ 174d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/*1024*/__u8 ldd_padding[4096 - 1024]; 175d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/*4096*/char ldd_mount_opts[4096]; /* target fs mount opts */ 176d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/*8192*/char ldd_params[4096]; /* key=value pairs */ 177d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao}; 178d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 179d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 180d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define IS_MDT(data) ((data)->lsi_flags & LDD_F_SV_TYPE_MDT) 181d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define IS_OST(data) ((data)->lsi_flags & LDD_F_SV_TYPE_OST) 182d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define IS_MGS(data) ((data)->lsi_flags & LDD_F_SV_TYPE_MGS) 183d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define IS_SERVER(data) ((data)->lsi_flags & (LDD_F_SV_TYPE_MGS | \ 184d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LDD_F_SV_TYPE_MDT | LDD_F_SV_TYPE_OST)) 185d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define MT_STR(data) mt_str((data)->ldd_mount_type) 186d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 187d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* Make the mdt/ost server obd name based on the filesystem name */ 188d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostatic inline int server_make_name(__u32 flags, __u16 index, char *fs, 189d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *name) 190d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 191d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (flags & (LDD_F_SV_TYPE_MDT | LDD_F_SV_TYPE_OST)) { 192d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (!(flags & LDD_F_SV_ALL)) 193d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao sprintf(name, "%.8s%c%s%04x", fs, 194d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao (flags & LDD_F_VIRGIN) ? ':' : 195d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao ((flags & LDD_F_WRITECONF) ? '=' : '-'), 196d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao (flags & LDD_F_SV_TYPE_MDT) ? "MDT" : "OST", 197d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao index); 198d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } else if (flags & LDD_F_SV_TYPE_MGS) { 199d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao sprintf(name, "MGS"); 200d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } else { 201d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao CERROR("unknown server type %#x\n", flags); 202d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return 1; 203d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 204d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return 0; 205d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 206d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 207d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/****************** mount command *********************/ 208d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 209d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* The lmd is only used internally by Lustre; mount simply passes 210d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao everything as string options */ 211d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 212d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LMD_MAGIC 0xbdacbd03 213d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 214d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* gleaned from the mount command - no persistent info here */ 215d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostruct lustre_mount_data { 216d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 lmd_magic; 217d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 lmd_flags; /* lustre mount flags */ 218d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int lmd_mgs_failnodes; /* mgs failover node count */ 219d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int lmd_exclude_count; 220d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int lmd_recovery_time_soft; 221d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int lmd_recovery_time_hard; 222d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *lmd_dev; /* device name */ 223d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *lmd_profile; /* client only */ 224d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *lmd_mgssec; /* sptlrpc flavor to mgs */ 225d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *lmd_opts; /* lustre mount options (as opposed to 226d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao _device_ mount options) */ 227d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *lmd_params; /* lustre params */ 228d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 *lmd_exclude; /* array of OSTs to ignore */ 229d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *lmd_mgs; /* MGS nid */ 230d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *lmd_osd_type; /* OSD type */ 231d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao}; 232d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 23399a92265bd61d7934542c5f398fd241c30287b70jcl#define LMD_FLG_SERVER 0x0001 /* Mounting a server */ 23499a92265bd61d7934542c5f398fd241c30287b70jcl#define LMD_FLG_CLIENT 0x0002 /* Mounting a client */ 23599a92265bd61d7934542c5f398fd241c30287b70jcl#define LMD_FLG_ABORT_RECOV 0x0008 /* Abort recovery */ 23699a92265bd61d7934542c5f398fd241c30287b70jcl#define LMD_FLG_NOSVC 0x0010 /* Only start MGS/MGC for servers, 23799a92265bd61d7934542c5f398fd241c30287b70jcl no other services */ 23899a92265bd61d7934542c5f398fd241c30287b70jcl#define LMD_FLG_NOMGS 0x0020 /* Only start target for servers, reusing 23999a92265bd61d7934542c5f398fd241c30287b70jcl existing MGS services */ 24099a92265bd61d7934542c5f398fd241c30287b70jcl#define LMD_FLG_WRITECONF 0x0040 /* Rewrite config log */ 24199a92265bd61d7934542c5f398fd241c30287b70jcl#define LMD_FLG_NOIR 0x0080 /* NO imperative recovery */ 24299a92265bd61d7934542c5f398fd241c30287b70jcl#define LMD_FLG_NOSCRUB 0x0100 /* Do not trigger scrub automatically */ 24399a92265bd61d7934542c5f398fd241c30287b70jcl#define LMD_FLG_MGS 0x0200 /* Also start MGS along with server */ 24499a92265bd61d7934542c5f398fd241c30287b70jcl#define LMD_FLG_IAM 0x0400 /* IAM dir */ 24599a92265bd61d7934542c5f398fd241c30287b70jcl#define LMD_FLG_NO_PRIMNODE 0x0800 /* all nodes are service nodes */ 24699a92265bd61d7934542c5f398fd241c30287b70jcl#define LMD_FLG_VIRGIN 0x1000 /* the service registers first time */ 24799a92265bd61d7934542c5f398fd241c30287b70jcl#define LMD_FLG_UPDATE 0x2000 /* update parameters */ 24899a92265bd61d7934542c5f398fd241c30287b70jcl#define LMD_FLG_HSM 0x4000 /* Start coordinator */ 249d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 250d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define lmd_is_client(x) ((x)->lmd_flags & LMD_FLG_CLIENT) 251d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 252d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 253d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/****************** last_rcvd file *********************/ 254d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 255d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** version recovery epoch */ 256d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LR_EPOCH_BITS 32 257d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define lr_epoch(a) ((a) >> LR_EPOCH_BITS) 258d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LR_EXPIRE_INTERVALS 16 /**< number of intervals to track transno */ 259d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define ENOENT_VERSION 1 /** 'virtual' version of non-existent object */ 260d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 261d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LR_SERVER_SIZE 512 262d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LR_CLIENT_START 8192 263d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LR_CLIENT_SIZE 128 264d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#if LR_CLIENT_START < LR_SERVER_SIZE 265d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#error "Can't have LR_CLIENT_START < LR_SERVER_SIZE" 266d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#endif 267d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 268d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* 269d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * This limit is arbitrary (131072 clients on x86), but it is convenient to use 270d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * 2^n * PAGE_CACHE_SIZE * 8 for the number of bits that fit an order-n allocation. 271d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * If we need more than 131072 clients (order-2 allocation on x86) then this 272d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * should become an array of single-page pointers that are allocated on demand. 273d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao */ 274d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#if (128 * 1024UL) > (PAGE_CACHE_SIZE * 8) 275d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LR_MAX_CLIENTS (128 * 1024UL) 276d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#else 277d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LR_MAX_CLIENTS (PAGE_CACHE_SIZE * 8) 278d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#endif 279d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 280d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** COMPAT_146: this is an OST (temporary) */ 281d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define OBD_COMPAT_OST 0x00000002 282d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** COMPAT_146: this is an MDT (temporary) */ 283d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define OBD_COMPAT_MDT 0x00000004 284d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** 2.0 server, interop flag to show server version is changed */ 285d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define OBD_COMPAT_20 0x00000008 286d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 287d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** MDS handles LOV_OBJID file */ 288d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define OBD_ROCOMPAT_LOVOBJID 0x00000001 289d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 290d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** OST handles group subdirs */ 291d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define OBD_INCOMPAT_GROUPS 0x00000001 292d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** this is an OST */ 293d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define OBD_INCOMPAT_OST 0x00000002 294d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** this is an MDT */ 295d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define OBD_INCOMPAT_MDT 0x00000004 296d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** common last_rvcd format */ 297d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define OBD_INCOMPAT_COMMON_LR 0x00000008 298d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** FID is enabled */ 299d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define OBD_INCOMPAT_FID 0x00000010 300d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** Size-on-MDS is enabled */ 301d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define OBD_INCOMPAT_SOM 0x00000020 302d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** filesystem using iam format to store directory entries */ 303d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define OBD_INCOMPAT_IAM_DIR 0x00000040 304d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** LMA attribute contains per-inode incompatible flags */ 305d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define OBD_INCOMPAT_LMA 0x00000080 306d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** lmm_stripe_count has been shrunk from __u32 to __u16 and the remaining 16 307d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * bits are now used to store a generation. Once we start changing the layout 308d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * and bumping the generation, old versions expecting a 32-bit lmm_stripe_count 309d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * will be confused by interpreting stripe_count | gen << 16 as the actual 310d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao * stripe count */ 311d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define OBD_INCOMPAT_LMM_VER 0x00000100 312d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** multiple OI files for MDT */ 313d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define OBD_INCOMPAT_MULTI_OI 0x00000200 314d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 315d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* Data stored per server at the head of the last_rcvd file. In le32 order. 316d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao This should be common to filter_internal.h, lustre_mds.h */ 317d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostruct lr_server_data { 318d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u8 lsd_uuid[40]; /* server UUID */ 319d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u64 lsd_last_transno; /* last completed transaction ID */ 320d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u64 lsd_compat14; /* reserved - compat with old last_rcvd */ 321d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u64 lsd_mount_count; /* incarnation number */ 322d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 lsd_feature_compat; /* compatible feature flags */ 323d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 lsd_feature_rocompat;/* read-only compatible feature flags */ 324d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 lsd_feature_incompat;/* incompatible feature flags */ 325d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 lsd_server_size; /* size of server data area */ 326d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 lsd_client_start; /* start of per-client data area */ 327d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u16 lsd_client_size; /* size of per-client data area */ 328d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u16 lsd_subdir_count; /* number of subdirectories for objects */ 329d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u64 lsd_catalog_oid; /* recovery catalog object id */ 330d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 lsd_catalog_ogen; /* recovery catalog inode generation */ 331d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u8 lsd_peeruuid[40]; /* UUID of MDS associated with this OST */ 332d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 lsd_osd_index; /* index number of OST in LOV */ 333d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 lsd_padding1; /* was lsd_mdt_index, unused in 2.4.0 */ 334d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 lsd_start_epoch; /* VBR: start epoch from last boot */ 335d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao /** transaction values since lsd_trans_table_time */ 336d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u64 lsd_trans_table[LR_EXPIRE_INTERVALS]; 337d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao /** start point of transno table below */ 338d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 lsd_trans_table_time; /* time of first slot in table above */ 339d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 lsd_expire_intervals; /* LR_EXPIRE_INTERVALS */ 340d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u8 lsd_padding[LR_SERVER_SIZE - 288]; 341d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao}; 342d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 343d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* Data stored per client in the last_rcvd file. In le32 order. */ 344d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostruct lsd_client_data { 345d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u8 lcd_uuid[40]; /* client UUID */ 346d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u64 lcd_last_transno; /* last completed transaction ID */ 347d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u64 lcd_last_xid; /* xid for the last transaction */ 348d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 lcd_last_result; /* result from last RPC */ 349d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 lcd_last_data; /* per-op data (disposition for open &c.) */ 350d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao /* for MDS_CLOSE requests */ 351d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u64 lcd_last_close_transno; /* last completed transaction ID */ 352d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u64 lcd_last_close_xid; /* xid for the last transaction */ 353d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 lcd_last_close_result; /* result from last RPC */ 354d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 lcd_last_close_data; /* per-op data */ 355d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao /* VBR: last versions */ 356d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u64 lcd_pre_versions[4]; 357d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 lcd_last_epoch; 358d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao /** orphans handling for delayed export rely on that */ 359d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u32 lcd_first_epoch; 360d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao __u8 lcd_padding[LR_CLIENT_SIZE - 128]; 361d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao}; 362d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 363d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* bug20354: the lcd_uuid for export of clients may be wrong */ 364d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostatic inline void check_lcd(char *obd_name, int index, 365d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao struct lsd_client_data *lcd) 366d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 367d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int length = sizeof(lcd->lcd_uuid); 368d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao if (strnlen((char*)lcd->lcd_uuid, length) == length) { 369d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lcd->lcd_uuid[length - 1] = '\0'; 370d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 371d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao LCONSOLE_ERROR("the client UUID (%s) on %s for exports" 372d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao "stored in last_rcvd(index = %d) is bad!\n", 373d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lcd->lcd_uuid, obd_name, index); 374d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao } 375d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 376d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 377d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* last_rcvd handling */ 378d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostatic inline void lsd_le_to_cpu(struct lr_server_data *buf, 379d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao struct lr_server_data *lsd) 380d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 381d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int i; 382d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao memcpy(lsd->lsd_uuid, buf->lsd_uuid, sizeof(lsd->lsd_uuid)); 383d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lsd->lsd_last_transno = le64_to_cpu(buf->lsd_last_transno); 384d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lsd->lsd_compat14 = le64_to_cpu(buf->lsd_compat14); 385d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lsd->lsd_mount_count = le64_to_cpu(buf->lsd_mount_count); 386d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lsd->lsd_feature_compat = le32_to_cpu(buf->lsd_feature_compat); 387d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lsd->lsd_feature_rocompat = le32_to_cpu(buf->lsd_feature_rocompat); 388d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lsd->lsd_feature_incompat = le32_to_cpu(buf->lsd_feature_incompat); 389d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lsd->lsd_server_size = le32_to_cpu(buf->lsd_server_size); 390d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lsd->lsd_client_start = le32_to_cpu(buf->lsd_client_start); 391d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lsd->lsd_client_size = le16_to_cpu(buf->lsd_client_size); 392d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lsd->lsd_subdir_count = le16_to_cpu(buf->lsd_subdir_count); 393d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lsd->lsd_catalog_oid = le64_to_cpu(buf->lsd_catalog_oid); 394d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lsd->lsd_catalog_ogen = le32_to_cpu(buf->lsd_catalog_ogen); 395d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao memcpy(lsd->lsd_peeruuid, buf->lsd_peeruuid, sizeof(lsd->lsd_peeruuid)); 396d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lsd->lsd_osd_index = le32_to_cpu(buf->lsd_osd_index); 397d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lsd->lsd_padding1 = le32_to_cpu(buf->lsd_padding1); 398d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lsd->lsd_start_epoch = le32_to_cpu(buf->lsd_start_epoch); 399d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao for (i = 0; i < LR_EXPIRE_INTERVALS; i++) 400d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lsd->lsd_trans_table[i] = le64_to_cpu(buf->lsd_trans_table[i]); 401d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lsd->lsd_trans_table_time = le32_to_cpu(buf->lsd_trans_table_time); 402d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lsd->lsd_expire_intervals = le32_to_cpu(buf->lsd_expire_intervals); 403d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 404d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 405d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostatic inline void lsd_cpu_to_le(struct lr_server_data *lsd, 406d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao struct lr_server_data *buf) 407d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 408d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int i; 409d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao memcpy(buf->lsd_uuid, lsd->lsd_uuid, sizeof(buf->lsd_uuid)); 410d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lsd_last_transno = cpu_to_le64(lsd->lsd_last_transno); 411d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lsd_compat14 = cpu_to_le64(lsd->lsd_compat14); 412d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lsd_mount_count = cpu_to_le64(lsd->lsd_mount_count); 413d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lsd_feature_compat = cpu_to_le32(lsd->lsd_feature_compat); 414d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lsd_feature_rocompat = cpu_to_le32(lsd->lsd_feature_rocompat); 415d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lsd_feature_incompat = cpu_to_le32(lsd->lsd_feature_incompat); 416d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lsd_server_size = cpu_to_le32(lsd->lsd_server_size); 417d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lsd_client_start = cpu_to_le32(lsd->lsd_client_start); 418d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lsd_client_size = cpu_to_le16(lsd->lsd_client_size); 419d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lsd_subdir_count = cpu_to_le16(lsd->lsd_subdir_count); 420d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lsd_catalog_oid = cpu_to_le64(lsd->lsd_catalog_oid); 421d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lsd_catalog_ogen = cpu_to_le32(lsd->lsd_catalog_ogen); 422d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao memcpy(buf->lsd_peeruuid, lsd->lsd_peeruuid, sizeof(buf->lsd_peeruuid)); 423d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lsd_osd_index = cpu_to_le32(lsd->lsd_osd_index); 424d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lsd_padding1 = cpu_to_le32(lsd->lsd_padding1); 425d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lsd_start_epoch = cpu_to_le32(lsd->lsd_start_epoch); 426d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao for (i = 0; i < LR_EXPIRE_INTERVALS; i++) 427d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lsd_trans_table[i] = cpu_to_le64(lsd->lsd_trans_table[i]); 428d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lsd_trans_table_time = cpu_to_le32(lsd->lsd_trans_table_time); 429d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lsd_expire_intervals = cpu_to_le32(lsd->lsd_expire_intervals); 430d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 431d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 432d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostatic inline void lcd_le_to_cpu(struct lsd_client_data *buf, 433d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao struct lsd_client_data *lcd) 434d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 435d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao memcpy(lcd->lcd_uuid, buf->lcd_uuid, sizeof (lcd->lcd_uuid)); 436d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lcd->lcd_last_transno = le64_to_cpu(buf->lcd_last_transno); 437d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lcd->lcd_last_xid = le64_to_cpu(buf->lcd_last_xid); 438d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lcd->lcd_last_result = le32_to_cpu(buf->lcd_last_result); 439d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lcd->lcd_last_data = le32_to_cpu(buf->lcd_last_data); 440d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lcd->lcd_last_close_transno = le64_to_cpu(buf->lcd_last_close_transno); 441d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lcd->lcd_last_close_xid = le64_to_cpu(buf->lcd_last_close_xid); 442d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lcd->lcd_last_close_result = le32_to_cpu(buf->lcd_last_close_result); 443d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lcd->lcd_last_close_data = le32_to_cpu(buf->lcd_last_close_data); 444d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lcd->lcd_pre_versions[0] = le64_to_cpu(buf->lcd_pre_versions[0]); 445d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lcd->lcd_pre_versions[1] = le64_to_cpu(buf->lcd_pre_versions[1]); 446d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lcd->lcd_pre_versions[2] = le64_to_cpu(buf->lcd_pre_versions[2]); 447d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lcd->lcd_pre_versions[3] = le64_to_cpu(buf->lcd_pre_versions[3]); 448d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lcd->lcd_last_epoch = le32_to_cpu(buf->lcd_last_epoch); 449d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lcd->lcd_first_epoch = le32_to_cpu(buf->lcd_first_epoch); 450d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 451d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 452d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostatic inline void lcd_cpu_to_le(struct lsd_client_data *lcd, 453d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao struct lsd_client_data *buf) 454d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 455d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao memcpy(buf->lcd_uuid, lcd->lcd_uuid, sizeof (lcd->lcd_uuid)); 456d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lcd_last_transno = cpu_to_le64(lcd->lcd_last_transno); 457d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lcd_last_xid = cpu_to_le64(lcd->lcd_last_xid); 458d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lcd_last_result = cpu_to_le32(lcd->lcd_last_result); 459d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lcd_last_data = cpu_to_le32(lcd->lcd_last_data); 460d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lcd_last_close_transno = cpu_to_le64(lcd->lcd_last_close_transno); 461d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lcd_last_close_xid = cpu_to_le64(lcd->lcd_last_close_xid); 462d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lcd_last_close_result = cpu_to_le32(lcd->lcd_last_close_result); 463d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lcd_last_close_data = cpu_to_le32(lcd->lcd_last_close_data); 464d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lcd_pre_versions[0] = cpu_to_le64(lcd->lcd_pre_versions[0]); 465d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lcd_pre_versions[1] = cpu_to_le64(lcd->lcd_pre_versions[1]); 466d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lcd_pre_versions[2] = cpu_to_le64(lcd->lcd_pre_versions[2]); 467d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lcd_pre_versions[3] = cpu_to_le64(lcd->lcd_pre_versions[3]); 468d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lcd_last_epoch = cpu_to_le32(lcd->lcd_last_epoch); 469d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao buf->lcd_first_epoch = cpu_to_le32(lcd->lcd_first_epoch); 470d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 471d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 472d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostatic inline __u64 lcd_last_transno(struct lsd_client_data *lcd) 473d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 474d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return (lcd->lcd_last_transno > lcd->lcd_last_close_transno ? 475d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lcd->lcd_last_transno : lcd->lcd_last_close_transno); 476d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 477d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 478d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostatic inline __u64 lcd_last_xid(struct lsd_client_data *lcd) 479d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao{ 480d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao return (lcd->lcd_last_xid > lcd->lcd_last_close_xid ? 481d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao lcd->lcd_last_xid : lcd->lcd_last_close_xid); 482d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao} 483d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 484d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/****************** superblock additional info *********************/ 485d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 486d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostruct ll_sb_info; 487d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 488d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostruct lustre_sb_info { 489d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao int lsi_flags; 490d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao struct obd_device *lsi_mgc; /* mgc obd */ 491d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao struct lustre_mount_data *lsi_lmd; /* mount command info */ 492d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao struct ll_sb_info *lsi_llsbi; /* add'l client sbi info */ 493d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao struct dt_device *lsi_dt_dev; /* dt device to access disk fs*/ 494d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao struct vfsmount *lsi_srv_mnt; /* the one server mount */ 495d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao atomic_t lsi_mounts; /* references to the srv_mnt */ 496d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char lsi_svname[MTI_NAME_MAXLEN]; 497d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char lsi_osd_obdname[64]; 498d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char lsi_osd_uuid[64]; 499d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao struct obd_export *lsi_osd_exp; 500d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char lsi_osd_type[16]; 501d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char lsi_fstype[16]; 502d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao struct backing_dev_info lsi_bdi; /* each client mountpoint needs 503d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao own backing_dev_info */ 504d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao}; 505d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 506d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LSI_UMOUNT_FAILOVER 0x00200000 507d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define LSI_BDI_INITIALIZED 0x00400000 508d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 509d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define s2lsi(sb) ((struct lustre_sb_info *)((sb)->s_fs_info)) 510d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define s2lsi_nocast(sb) ((sb)->s_fs_info) 511d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 512d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define get_profile_name(sb) (s2lsi(sb)->lsi_lmd->lmd_profile) 513d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define get_mount_flags(sb) (s2lsi(sb)->lsi_lmd->lmd_flags) 514d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao#define get_mntdev_name(sb) (s2lsi(sb)->lsi_lmd->lmd_dev) 515d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 516d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 517d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/****************** mount lookup info *********************/ 518d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 519d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taostruct lustre_mount_info { 520d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *lmi_name; 521d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao struct super_block *lmi_sb; 522d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao struct vfsmount *lmi_mnt; 523d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao struct list_head lmi_list_chain; 524d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao}; 525d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 526d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/****************** prototypes *********************/ 527d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 528d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/* obd_mount.c */ 529d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint server_name2fsname(const char *svname, char *fsname, const char **endptr); 530d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint server_name2index(const char *svname, __u32 *idx, const char **endptr); 531d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint server_name2svname(const char *label, char *svname, const char **endptr, 532d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao size_t svsize); 533d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 534d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint lustre_put_lsi(struct super_block *sb); 535d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint lustre_start_simple(char *obdname, char *type, char *uuid, 536d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao char *s1, char *s2, char *s3, char *s4); 537d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint lustre_start_mgc(struct super_block *sb); 538d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taovoid lustre_register_client_fill_super(int (*cfs)(struct super_block *sb, 539d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao struct vfsmount *mnt)); 540d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taovoid lustre_register_kill_super_cb(void (*cfs)(struct super_block *sb)); 541d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint lustre_common_put_super(struct super_block *sb); 542d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 543d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 544d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Taoint mgc_fsname2resid(char *fsname, struct ldlm_res_id *res_id, int type); 545d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 546d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao/** @} disk */ 547d7e09d0397e84eefbabfd9cb353221f3c6448d83Peng Tao 548995c8b4a555baf29de86ce6b68967d03791ae2b2Greg Donald#endif /* _LUSTRE_DISK_H */ 549