Whamcloud - gitweb
Constify instances of struct {lu,dt,md}_device_operations.
[fs/lustre-release.git] / lustre / include / md_object.h
index 1f383a6..774e34b 100644 (file)
@@ -41,7 +41,7 @@
 #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.
  *
@@ -49,6 +49,7 @@
  * them, and treat them as directories.
  *
  * Examples: mdt, cmm, and mdt are implementations of md interface.
+ * @{
  */
 
 
@@ -81,7 +82,7 @@ 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 md_identity *mu_identity;
@@ -89,14 +90,14 @@ struct md_ucred {
 
 #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
@@ -105,7 +106,7 @@ 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),
@@ -150,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;
@@ -167,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 {
@@ -213,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,
@@ -235,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 {
@@ -257,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,
@@ -276,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,
@@ -294,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);
 
@@ -314,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;
 };
 
@@ -422,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,
@@ -550,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,
@@ -668,4 +685,6 @@ static inline int mdo_rename_tgt(const struct lu_env *env,
         }
 }
 
+/** @} md */
+
 #endif /* _LINUX_MD_OBJECT_H */