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) 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/fid/fid_lib.c 37 * 38 * Miscellaneous fid functions. 39 * 40 * Author: Nikita Danilov <nikita@clusterfs.com> 41 * Author: Yury Umanets <umka@clusterfs.com> 42 */ 43 44 #define DEBUG_SUBSYSTEM S_FID 45 46 #include "../../include/linux/libcfs/libcfs.h" 47 #include <linux/module.h> 48 #include "../include/lustre/lustre_idl.h" 49 #include "../include/lustre_fid.h" 50 51 /** 52 * A cluster-wide range from which fid-sequences are granted to servers and 53 * then clients. 54 * 55 * Fid namespace: 56 * <pre> 57 * Normal FID: seq:64 [2^33,2^64-1] oid:32 ver:32 58 * IGIF : 0:32, ino:32 gen:32 0:32 59 * IDIF : 0:31, 1:1, ost-index:16, objd:48 0:32 60 * </pre> 61 * 62 * The first 0x400 sequences of normal FID are reserved for special purpose. 63 * FID_SEQ_START + 1 is for local file id generation. 64 * FID_SEQ_START + 2 is for .lustre directory and its objects 65 */ 66 const struct lu_seq_range LUSTRE_SEQ_SPACE_RANGE = { 67 FID_SEQ_NORMAL, 68 (__u64)~0ULL 69 }; 70 EXPORT_SYMBOL(LUSTRE_SEQ_SPACE_RANGE); 71 72 /* Zero range, used for init and other purposes. */ 73 const struct lu_seq_range LUSTRE_SEQ_ZERO_RANGE = { 74 0, 75 0 76 }; 77 EXPORT_SYMBOL(LUSTRE_SEQ_ZERO_RANGE); 78 79 /* Lustre Big Fs Lock fid. */ 80 const struct lu_fid LUSTRE_BFL_FID = { .f_seq = FID_SEQ_SPECIAL, 81 .f_oid = FID_OID_SPECIAL_BFL, 82 .f_ver = 0x0000000000000000 }; 83 EXPORT_SYMBOL(LUSTRE_BFL_FID); 84 85 /** Special fid for ".lustre" directory */ 86 const struct lu_fid LU_DOT_LUSTRE_FID = { .f_seq = FID_SEQ_DOT_LUSTRE, 87 .f_oid = FID_OID_DOT_LUSTRE, 88 .f_ver = 0x0000000000000000 }; 89 EXPORT_SYMBOL(LU_DOT_LUSTRE_FID); 90 91 /** Special fid for "fid" special object in .lustre */ 92 const struct lu_fid LU_OBF_FID = { .f_seq = FID_SEQ_DOT_LUSTRE, 93 .f_oid = FID_OID_DOT_LUSTRE_OBF, 94 .f_ver = 0x0000000000000000 }; 95 EXPORT_SYMBOL(LU_OBF_FID); 96