/* 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;
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;
};
#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 {
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
/* 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);
}
+/* Here we use OBD_CONNECT_DISP_STRIPE to check the client who support
+ * striped directory, because it is also landed on 2.6 */
+static inline bool mdt_is_striped_client(struct obd_export *exp)
+{
+ return exp_connect_flags(exp) & OBD_CONNECT_DISP_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);
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 {
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,
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 *);
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);