X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Fmd_object.h;h=774e34bdbb29dfa173c429624c3edf494211a602;hb=6b6ae6fe7cc74816c42878630d73400a072598f3;hp=7fa59b25a12613c62049b53067da8272ab43d42c;hpb=1d3c17c697fcabe8a8ae0d23a8e915a268ad2e71;p=fs%2Flustre-release.git diff --git a/lustre/include/md_object.h b/lustre/include/md_object.h index 7fa59b2..774e34b 100644 --- a/lustre/include/md_object.h +++ b/lustre/include/md_object.h @@ -1,31 +1,47 @@ /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- * vim:expandtab:shiftwidth=8:tabstop=8: * - * Extention of lu_object.h for metadata objects + * GPL HEADER START * - * Copyright (C) 2006 Cluster File Systems, Inc. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * This file is part of Lustre, http://www.lustre.org. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 only, + * as published by the Free Software Foundation. * - * Lustre is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License version 2 for more details (a copy is included + * in the LICENSE file that accompanied this code). * - * Lustre is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * version 2 along with this program; If not, see + * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf * - * You should have received a copy of the GNU General Public License - * along with Lustre; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. * + * GPL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Use is subject to license terms. + */ +/* + * This file is part of Lustre, http://www.lustre.org/ + * Lustre is a trademark of Sun Microsystems, Inc. + * + * lustre/include/md_object.h + * + * Extention of lu_object.h for metadata objects */ #ifndef _LUSTRE_MD_OBJECT_H #define _LUSTRE_MD_OBJECT_H -/* +/** \defgroup md md * Sub-class of lu_object with methods common for "meta-data" objects in MDT * stack. * @@ -33,6 +49,7 @@ * them, and treat them as directories. * * Examples: mdt, cmm, and mdt are implementations of md interface. + * @{ */ @@ -47,20 +64,15 @@ struct md_device_operations; struct md_object; -typedef enum { +enum { UCRED_INVALID = -1, UCRED_INIT = 0, UCRED_OLD = 1, - UCRED_NEW = 2, -} ucred_t; - -#define SQUASH_NONE 0x00 -#define SQUASH_UID 0x01 -#define SQUASH_GID 0x02 + UCRED_NEW = 2 +}; struct md_ucred { - ucred_t mu_valid; - __u32 mu_squash; + __u32 mu_valid; __u32 mu_o_uid; __u32 mu_o_gid; __u32 mu_o_fsuid; @@ -70,22 +82,22 @@ struct md_ucred { __u32 mu_fsuid; __u32 mu_fsgid; __u32 mu_suppgids[2]; - __u32 mu_cap; + cfs_cap_t mu_cap; __u32 mu_umask; struct group_info *mu_ginfo; - struct mdt_identity *mu_identity; + struct md_identity *mu_identity; }; #define MD_CAPAINFO_MAX 5 -/* there are at most 5 fids in one operation, see rename, NOTE the last one +/** there are at most 5 fids in one operation, see rename, NOTE the last one * is a temporary one used for is_subdir() */ struct md_capainfo { const struct lu_fid *mc_fid[MD_CAPAINFO_MAX]; struct lustre_capa *mc_capa[MD_CAPAINFO_MAX]; }; -/* +/** * Implemented in mdd/mdd_handler.c. * * XXX should be moved into separate .h/.c together with all md security @@ -94,14 +106,15 @@ struct md_capainfo { struct md_ucred *md_ucred(const struct lu_env *env); struct md_capainfo *md_capainfo(const struct lu_env *env); -/* metadata attributes */ +/** metadata attributes */ enum ma_valid { MA_INODE = (1 << 0), MA_LOV = (1 << 1), MA_COOKIE = (1 << 2), MA_FLAGS = (1 << 3), MA_LMV = (1 << 4), - MA_ACL_DEF = (1 << 5) + MA_ACL_DEF = (1 << 5), + MA_LOV_DEF = (1 << 6) }; typedef enum { @@ -138,16 +151,16 @@ struct md_attr { struct lustre_capa *ma_capa; }; -/* Additional parameters for create */ +/** Additional parameters for create */ struct md_op_spec { union { - /* symlink target */ + /** symlink target */ const char *sp_symname; - /* parent FID for cross-ref mkdir */ + /** parent FID for cross-ref mkdir */ const struct lu_fid *sp_pfid; - /* eadata for regular files */ + /** eadata for regular files */ struct md_spec_reg { - /* lov objs exist already */ + /** lov objs exist already */ const struct lu_fid *fid; int no_lov_create; const void *eadata; @@ -155,20 +168,20 @@ struct md_op_spec { } sp_ea; } u; - /* Create flag from client: such as MDS_OPEN_CREAT, and others. */ + /** Create flag from client: such as MDS_OPEN_CREAT, and others. */ __u32 sp_cr_flags; - /* Should mdd do lookup sanity check or not. */ + /** Should mdd do lookup sanity check or not. */ int sp_cr_lookup; - /* Current lock mode for parent dir where create is performing. */ + /** Current lock mode for parent dir where create is performing. */ mdl_mode_t sp_cr_mode; - /* Check for split */ + /** Check for split */ int sp_ck_split; }; -/* +/** * Operations implemented for each md object (both directory and leaf). */ struct md_object_operations { @@ -201,7 +214,7 @@ struct md_object_operations { int (*moo_readlink)(const struct lu_env *env, struct md_object *obj, struct lu_buf *buf); - /* part of cross-ref operation */ + /** part of cross-ref operation */ int (*moo_object_create)(const struct lu_env *env, struct md_object *obj, const struct md_op_spec *spec, @@ -223,9 +236,10 @@ struct md_object_operations { int (*moo_capa_get)(const struct lu_env *, struct md_object *, struct lustre_capa *, int renewal); + int (*moo_object_sync)(const struct lu_env *, struct md_object *); }; -/* +/** * Operations implemented for each directory object. */ struct md_dir_operations { @@ -245,7 +259,7 @@ struct md_dir_operations { struct md_op_spec *spec, struct md_attr *ma); - /* This method is used for creating data object for this meta object*/ + /** This method is used for creating data object for this meta object*/ int (*mdo_create_data)(const struct lu_env *env, struct md_object *p, struct md_object *o, const struct md_op_spec *spec, @@ -264,7 +278,7 @@ struct md_dir_operations { struct md_object *cobj, const struct lu_name *lname, struct md_attr *ma); - /* partial ops for cross-ref case */ + /** partial ops for cross-ref case */ int (*mdo_name_insert)(const struct lu_env *env, struct md_object *obj, const struct lu_name *lname, @@ -282,7 +296,7 @@ struct md_dir_operations { }; struct md_device_operations { - /* meta-data device related handlers. */ + /** meta-data device related handlers. */ int (*mdo_root_get)(const struct lu_env *env, struct md_device *m, struct lu_fid *f); @@ -302,26 +316,27 @@ struct md_device_operations { }; enum md_upcall_event { - /*sync the md layer*/ + /**sync the md layer*/ MD_LOV_SYNC = (1 << 0), - MD_NO_TRANS = (1 << 1), /* Just for split, no need trans, for replay */ + /** Just for split, no need trans, for replay */ + MD_NO_TRANS = (1 << 1), MD_LOV_CONFIG = (1 << 2) }; struct md_upcall { - /* this lock protects upcall using against its removal + /** this lock protects upcall using against its removal * read lock is for usage the upcall, write - for init/fini */ struct rw_semaphore mu_upcall_sem; - /* device to call, upper layer normally */ + /** device to call, upper layer normally */ struct md_device *mu_upcall_dev; - /* upcall function */ + /** upcall function */ int (*mu_upcall)(const struct lu_env *env, struct md_device *md, enum md_upcall_event ev); }; struct md_device { struct lu_device md_lu_dev; - struct md_device_operations *md_ops; + const struct md_device_operations *md_ops; struct md_upcall md_upcall; }; @@ -410,7 +425,15 @@ static inline void md_device_fini(struct md_device *md) lu_device_fini(&md->md_lu_dev); } -/* md operations */ +static inline struct md_object *md_object_find_slice(const struct lu_env *env, + struct md_device *md, + const struct lu_fid *f) +{ + return lu2md(lu_object_find_slice(env, md2lu_dev(md), f, NULL)); +} + + +/** md operations */ static inline int mo_permission(const struct lu_env *env, struct md_object *p, struct md_object *c, @@ -538,6 +561,12 @@ static inline int mo_capa_get(const struct lu_env *env, return m->mo_ops->moo_capa_get(env, m, c, renewal); } +static inline int mo_object_sync(const struct lu_env *env, struct md_object *m) +{ + LASSERT(m->mo_ops->moo_object_sync); + return m->mo_ops->moo_object_sync(env, m); +} + static inline int mdo_lookup(const struct lu_env *env, struct md_object *p, const struct lu_name *lname, @@ -656,4 +685,6 @@ static inline int mdo_rename_tgt(const struct lu_env *env, } } +/** @} md */ + #endif /* _LINUX_MD_OBJECT_H */