+static inline const char *mt_str(enum ldd_mount_type mt)
+{
+ static const char * const mount_type_string[] = {
+ "ext3",
+ "ldiskfs",
+ "smfs",
+ "reiserfs",
+ "ldiskfs2",
+ "zfs",
+ };
+ return mount_type_string[mt];
+}
+
+static inline const char *mt_type(enum ldd_mount_type mt)
+{
+ static const char * const mount_type_string[] = {
+ "osd-ldiskfs",
+ "osd-ldiskfs",
+ "osd-smfs",
+ "osd-reiserfs",
+ "osd-ldiskfs",
+ "osd-zfs",
+ };
+ return mount_type_string[mt];
+}
+#endif /* HAVE_SERVER_SUPPORT */
+
+#define MT_STR(data) mt_str((data)->ldd_mount_type)
+
+#define IS_MDT(data) ((data)->ldd_flags & LDD_F_SV_TYPE_MDT)
+#define IS_OST(data) ((data)->ldd_flags & LDD_F_SV_TYPE_OST)
+#define IS_MGS(data) ((data)->ldd_flags & LDD_F_SV_TYPE_MGS)
+#define IS_SEPARATED_MGS(data) ((data)->ldd_flags == LDD_F_SV_TYPE_MGS)
+#define IS_SERVER(data) ((data)->ldd_flags & (LDD_F_SV_TYPE_MGS | \
+ LDD_F_SV_TYPE_MDT | LDD_F_SV_TYPE_OST))
+
+
+/* mkfs/mount helper functions */
+void fatal(void);
+int run_command_err(char *cmd, int cmdsz, char *error_msg);
+int run_command(char *cmd, int cmdsz);
+int add_param(char *buf, char *key, char *val);
+int append_param(char *buf, char *key, char *val, char sep);
+int get_param(char *buf, char *key, char **val);
+char *strscat(char *dst, char *src, int buflen);
+char *strscpy(char *dst, char *src, int buflen);
+int check_mtab_entry(char *spec1, char *spec2, char *mntpt, char *type);
+int update_mtab_entry(char *spec, char *mtpt, char *type, char *opts,
+ int flags, int freq, int pass);
+int update_utab_entry(struct mount_opts *mop);
+int check_mountfsoptions(char *mountopts, char *wanted_mountopts);
+void trim_mountfsoptions(char *s);
+#ifdef HAVE_SERVER_SUPPORT
+__u64 get_device_size(char* device);
+int lustre_rename_fsname(struct mkfs_opts *mop, const char *mntpt,
+ const char *oldname);
+
+/* loopback helper functions */
+int file_create(char *path, __u64 size);
+int loop_format(struct mkfs_opts *mop);
+int loop_setup(struct mkfs_opts *mop);
+int loop_cleanup(struct mkfs_opts *mop);
+
+/* generic target support */
+int osd_write_ldd(struct mkfs_opts *mop);
+int osd_read_ldd(char *dev, struct lustre_disk_data *ldd);
+int osd_erase_ldd(struct mkfs_opts *mop, char *param);
+void osd_print_ldd_params(struct mkfs_opts *mop);
+int osd_is_lustre(char *dev, unsigned *mount_type);
+int osd_make_lustre(struct mkfs_opts *mop);
+int osd_prepare_lustre(struct mkfs_opts *mop,
+ char *wanted_mountopts, size_t len);
+int osd_fix_mountopts(struct mkfs_opts *mop, char *mountopts, size_t len);
+int osd_tune_lustre(char *dev, struct mount_opts *mop);
+int osd_label_lustre(struct mount_opts *mop);
+int osd_rename_fsname(struct mkfs_opts *mop, const char *oldname);
+int osd_enable_quota(struct mkfs_opts *mop);
+int osd_init(void);
+void osd_fini(void);
+
+struct module_backfs_ops {
+ int (*init)(void);
+ void (*fini)(void);
+ int (*read_ldd)(char *ds, struct lustre_disk_data *ldd);
+ int (*write_ldd)(struct mkfs_opts *mop);
+ int (*erase_ldd)(struct mkfs_opts *mop, char *param);
+ void (*print_ldd_params)(struct mkfs_opts *mop);
+ int (*is_lustre)(char *dev, enum ldd_mount_type *mount_type);
+ int (*make_lustre)(struct mkfs_opts *mop);
+ int (*prepare_lustre)(struct mkfs_opts *mop,
+ char *wanted_mountopts, size_t len);
+ int (*fix_mountopts)(struct mkfs_opts *mop,
+ char *mountopts, size_t len);
+ int (*tune_lustre)(char *dev, struct mount_opts *mop);
+ int (*label_lustre)(struct mount_opts *mop);
+ int (*enable_quota)(struct mkfs_opts *mop);
+ int (*rename_fsname)(struct mkfs_opts *mop, const char *oldname);
+ void *dl_handle;
+};
+
+extern struct module_backfs_ops zfs_ops;
+extern struct module_backfs_ops ldiskfs_ops;
+
+struct module_backfs_ops *load_backfs_module(enum ldd_mount_type mount_type);
+void unload_backfs_ops(struct module_backfs_ops *ops);
+#endif
+
+#ifdef HAVE_OPENSSL_SSK
+int load_shared_keys(struct mount_opts *mop);
+#else
+static inline int load_shared_keys(struct mount_opts *mop)
+{
+ return EOPNOTSUPP;
+}
+#endif