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;
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;
/* 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);
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 *,
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,
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_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,
};
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);