Whamcloud - gitweb
LU-5370 mdt: return -MDT_EREMOTE_OPEN for remote open
[fs/lustre-release.git] / lustre / mdt / mdt_internal.h
index 6c9d9fe..75127e3 100644 (file)
@@ -50,6 +50,7 @@
 
 #if defined(__KERNEL__)
 
+#include <libcfs/lucache.h>
 #include <lustre_net.h>
 #include <lustre/lustre_idl.h>
 #include <obd_class.h>
@@ -63,6 +64,7 @@
 #include <lustre_idmap.h>
 #include <lustre_eacl.h>
 #include <lustre_quota.h>
+#include <lustre_linkea.h>
 
 /* check if request's xid is equal to last one or not*/
 static inline int req_xid_is_last(struct ptlrpc_request *req)
@@ -191,7 +193,6 @@ struct mdt_device {
         /* these values should be updated from lov if necessary.
          * or should be placed somewhere else. */
         int                        mdt_max_mdsize;
-        int                        mdt_max_cookiesize;
 
        int                        mdt_max_ea_size;
 
@@ -218,12 +219,7 @@ struct mdt_device {
        spinlock_t                 mdt_osfs_lock;
 
         /* root squash */
-        uid_t                      mdt_squash_uid;
-        gid_t                      mdt_squash_gid;
-        cfs_list_t                 mdt_nosquash_nids;
-        char                      *mdt_nosquash_str;
-        int                        mdt_nosquash_strlen;
-       struct rw_semaphore        mdt_squash_sem;
+       struct root_squash_info    mdt_squash;
 
         struct rename_stats        mdt_rename_stats;
        struct lu_fid              mdt_md_root_fid;
@@ -237,10 +233,6 @@ struct mdt_device {
 };
 
 #define MDT_SERVICE_WATCHDOG_FACTOR    (2)
-#define MDT_ROCOMPAT_SUPP      (OBD_ROCOMPAT_LOVOBJID)
-#define MDT_INCOMPAT_SUPP      (OBD_INCOMPAT_MDT | OBD_INCOMPAT_COMMON_LR | \
-                               OBD_INCOMPAT_FID | OBD_INCOMPAT_IAM_DIR | \
-                               OBD_INCOMPAT_LMM_VER | OBD_INCOMPAT_MULTI_OI)
 #define MDT_COS_DEFAULT         (0)
 
 struct mdt_object {
@@ -315,6 +307,13 @@ enum {
         MDT_CROSS_LOCK
 };
 
+/* Special magical errno for communicaiton between mdt_reint_open()
+ * and mdt_intent_reint() which means return the lock to the client
+ * for subsequent cross ref open. Previously we used plain -EREMOTE
+ * but other functions called in that path might return it too and
+ * confuse us. This is not returned to the client. See LU-5370. */
+#define MDT_EREMOTE_OPEN (EREMOTE + 1024)
+
 struct mdt_reint_record {
        mdt_reint_t                      rr_opcode;
        const struct lustre_handle      *rr_handle;
@@ -477,31 +476,6 @@ static inline struct mdt_thread_info *mdt_th_info(const struct lu_env *env)
        return mti;
 }
 
-/* ptlrpc request handler for MDT. All handlers are
- * grouped into several slices - struct mdt_opc_slice,
- * and stored in an array - mdt_handlers[].
- */
-struct mdt_handler {
-       /* The name of this handler. */
-       const char *mh_name;
-       /* Fail id for this handler, checked at the beginning of this handler*/
-       int      mh_fail_id;
-       /* Operation code for this handler */
-       __u32       mh_opc;
-       /* flags are listed in enum mdt_handler_flags below. */
-       __u32       mh_flags;
-       /* The actual handler function to execute. */
-       int (*mh_act)(struct mdt_thread_info *info);
-       /* Request format for this request. */
-       const struct req_format *mh_fmt;
-};
-
-struct mdt_opc_slice {
-       __u32                   mos_opc_start;
-       int                     mos_opc_end;
-       struct mdt_handler      *mos_hs;
-};
-
 struct cdt_req_progress {
        struct mutex             crp_lock;      /**< protect tree */
        struct interval_node    *crp_root;      /**< tree to track extent
@@ -622,11 +596,16 @@ static inline void mdt_export_evict(struct obd_export *exp)
 
 /* Here we use LVB_TYPE to check dne client, because it is
  * also landed on 2.4. */
-static inline int mdt_is_dne_client(struct obd_export *exp)
+static inline bool mdt_is_dne_client(struct obd_export *exp)
 {
        return !!(exp_connect_flags(exp) & OBD_CONNECT_LVB_TYPE);
 }
 
+static inline bool mdt_is_striped_client(struct obd_export *exp)
+{
+       return exp_connect_flags(exp) & OBD_CONNECT_DIR_STRIPE;
+}
+
 int mdt_get_disposition(struct ldlm_reply *rep, int flag);
 void mdt_set_disposition(struct mdt_thread_info *info,
                         struct ldlm_reply *rep, int flag);
@@ -644,6 +623,10 @@ int mdt_lock_setup(struct mdt_thread_info *info,
                    struct mdt_object *o,
                    struct mdt_lock_handle *lh);
 
+int mdt_check_resent_lock(struct mdt_thread_info *info,
+                         struct mdt_object *mo,
+                         struct mdt_lock_handle *lhc);
+
 int mdt_object_lock(struct mdt_thread_info *,
                     struct mdt_object *,
                     struct mdt_lock_handle *,
@@ -677,7 +660,8 @@ void mdt_object_unlock_put(struct mdt_thread_info *,
 void mdt_client_compatibility(struct mdt_thread_info *info);
 
 int mdt_remote_object_lock(struct mdt_thread_info *mti,
-                          struct mdt_object *o, struct lustre_handle *lh,
+                          struct mdt_object *o, const struct lu_fid *fid,
+                          struct lustre_handle *lh,
                           ldlm_mode_t mode, __u64 ibits);
 
 enum mdt_name_flags {
@@ -744,6 +728,10 @@ enum {
 int mdt_get_info(struct tgt_session_info *tsi);
 int mdt_attr_get_complex(struct mdt_thread_info *info,
                         struct mdt_object *o, struct md_attr *ma);
+int mdt_big_xattr_get(struct mdt_thread_info *info, struct mdt_object *o,
+                     const char *name);
+int mdt_stripe_get(struct mdt_thread_info *info, struct mdt_object *o,
+                  struct md_attr *ma, const char *name);
 int mdt_ioepoch_open(struct mdt_thread_info *info, struct mdt_object *o,
                      int created);
 int mdt_object_is_som_enabled(struct mdt_object *mo);
@@ -768,7 +756,8 @@ struct lu_buf *mdt_buf(const struct lu_env *env, void *area, ssize_t len);
 const struct lu_buf *mdt_buf_const(const struct lu_env *env,
                                    const void *area, ssize_t len);
 
-void mdt_dump_lmm(int level, const struct lov_mds_md *lmm);
+void mdt_dump_lmm(int level, const struct lov_mds_md *lmm, __u64 valid);
+void mdt_dump_lmv(unsigned int level, const union lmv_mds_md *lmv);
 
 int mdt_check_ucred(struct mdt_thread_info *);
 int mdt_init_ucred(struct mdt_thread_info *, struct mdt_body *);
@@ -783,12 +772,14 @@ void mdt_thread_info_init(struct ptlrpc_request *req,
 void mdt_thread_info_fini(struct mdt_thread_info *mti);
 struct mdt_thread_info *tsi2mdt_info(struct tgt_session_info *tsi);
 
-extern struct lprocfs_vars lprocfs_mds_module_vars[];
-extern struct lprocfs_vars lprocfs_mds_obd_vars[];
-
 int mdt_hsm_attr_set(struct mdt_thread_info *info, struct mdt_object *obj,
                     const struct md_hsm *mh);
 
+int mdt_remote_blocking_ast(struct ldlm_lock *lock, struct ldlm_lock_desc *desc,
+                           void *data, int flag);
+int mdt_links_read(struct mdt_thread_info *info,
+                  struct mdt_object *mdt_obj,
+                  struct linkea_data *ldata);
 /* mdt_idmap.c */
 int mdt_init_idmap(struct tgt_session_info *tsi);
 void mdt_cleanup_idmap(struct mdt_export_data *);
@@ -918,13 +909,12 @@ int mdt_hsm_cdt_fini(struct mdt_device *mdt);
 int mdt_hsm_cdt_wakeup(struct mdt_device *mdt);
 
 /* coordinator control /proc interface */
-int lprocfs_wr_hsm_cdt_control(struct file *file, const char *buffer,
-                              unsigned long count, void *data);
-int lprocfs_rd_hsm_cdt_control(char *page, char **start, off_t off,
-                              int count, int *eof, void *data);
+ssize_t mdt_hsm_cdt_control_seq_write(struct file *file, const char *buffer,
+                                       size_t count, loff_t *off);
+int mdt_hsm_cdt_control_seq_show(struct seq_file *m, void *data);
 int hsm_cdt_procfs_init(struct mdt_device *mdt);
 void hsm_cdt_procfs_fini(struct mdt_device *mdt);
-struct lprocfs_vars *hsm_cdt_get_proc_vars(void);
+struct lprocfs_seq_vars *hsm_cdt_get_proc_vars(void);
 /* md_hsm helpers */
 struct mdt_object *mdt_hsm_get_md_hsm(struct mdt_thread_info *mti,
                                      const struct lu_fid *fid,
@@ -1064,10 +1054,12 @@ enum {
 };
 void mdt_counter_incr(struct ptlrpc_request *req, int opcode);
 void mdt_stats_counter_init(struct lprocfs_stats *stats);
-void lprocfs_mdt_init_vars(struct lprocfs_static_vars *lvars);
-void lprocfs_mds_init_vars(struct lprocfs_static_vars *lvars);
 int mdt_procfs_init(struct mdt_device *mdt, const char *name);
 void mdt_procfs_fini(struct mdt_device *mdt);
+
+/* lustre/mdt_mdt_lproc.c */
+int lprocfs_mdt_open_files_seq_open(struct inode *inode,
+                                   struct file *file);
 void mdt_rename_counter_tally(struct mdt_thread_info *info,
                              struct mdt_device *mdt,
                              struct ptlrpc_request *req,