Whamcloud - gitweb
Constify instances of struct {lu,dt,md}_device_operations.
[fs/lustre-release.git] / lustre / include / md_object.h
index c4ebbb0..774e34b 100644 (file)
@@ -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,25 +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;
 };
 
@@ -409,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,
@@ -537,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,
@@ -655,4 +685,6 @@ static inline int mdo_rename_tgt(const struct lu_env *env,
         }
 }
 
+/** @} md */
+
 #endif /* _LINUX_MD_OBJECT_H */