#include <lustre_param.h>
static int (*client_fill_super)(struct super_block *sb) = NULL;
+static void (*kill_super_cb)(struct super_block *sb) = NULL;
/*********** mount lookup *********/
}
/* log has been fully processed */
- obd_notify(obd, NULL, OBD_NOTIFY_CONFIG, 0);
+ obd_notify(obd, NULL, OBD_NOTIFY_CONFIG, (void *)CONFIG_LOG);
}
RETURN(rc);
mnt = ll_kern_mount("ldiskfs", s_flags, lmd->lmd_dev, 0);
if (IS_ERR(mnt)) {
rc = PTR_ERR(mnt);
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0))
- /* 2.6 kernels: if ldiskfs fails, try ldiskfs2 */
- mnt = ll_kern_mount("ldiskfs2", s_flags, lmd->lmd_dev, 0);
- if (IS_ERR(mnt)) {
- int rc2 = PTR_ERR(mnt);
- CERROR("premount %s:%#lx ldiskfs failed: %d, ldiskfs2 "
- "failed: %d. Is the ldiskfs module available?\n",
- lmd->lmd_dev, s_flags, rc, rc2);
- GOTO(out_free, rc);
- }
-#else
- /* 2.4 kernels: if ldiskfs fails, try ext3 */
- mnt = ll_kern_mount("ext3", s_flags, lmd->lmd_dev, 0);
- if (IS_ERR(mnt)) {
- rc = PTR_ERR(mnt);
- CERROR("premount ext3 failed: rc = %d\n", rc);
- GOTO(out_free, rc);
- }
-#endif
+ CERROR("premount %s:%#lx ldiskfs failed: %d "
+ "Is the ldiskfs module available?\n",
+ lmd->lmd_dev, s_flags, rc );
+ GOTO(out_free, rc);
}
OBD_SET_CTXT_MAGIC(&mount_ctxt);
client_fill_super = cfs;
}
+void lustre_register_kill_super_cb(void (*cfs)(struct super_block *sb))
+{
+ kill_super_cb = cfs;
+}
+
/***************** FS registration ******************/
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0))
-/* 2.5 and later */
#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18))
struct super_block * lustre_get_sb(struct file_system_type *fs_type,
int flags, const char *devname, void * data)
}
#endif
-struct file_system_type lustre_fs_type = {
- .owner = THIS_MODULE,
- .name = "lustre",
- .get_sb = lustre_get_sb,
- .kill_sb = kill_anon_super,
- .fs_flags = FS_BINARY_MOUNTDATA,
-};
-
-#else
-/* 2.4 */
-static struct super_block *lustre_read_super(struct super_block *sb,
- void *data, int silent)
+void lustre_kill_super(struct super_block *sb)
{
- int rc;
- ENTRY;
+ struct lustre_sb_info *lsi = s2lsi(sb);
- rc = lustre_fill_super(sb, data, silent);
- if (rc)
- RETURN(NULL);
- RETURN(sb);
+ if (kill_super_cb && lsi &&(lsi->lsi_flags & LSI_SERVER))
+ (*kill_super_cb)(sb);
+
+ kill_anon_super(sb);
}
-static struct file_system_type lustre_fs_type = {
- .owner = THIS_MODULE,
- .name = "lustre",
- .fs_flags = FS_NFSEXP_FSID,
- .read_super = lustre_read_super,
+struct file_system_type lustre_fs_type = {
+ .owner = THIS_MODULE,
+ .name = "lustre",
+ .get_sb = lustre_get_sb,
+ .kill_sb = lustre_kill_super,
+ .fs_flags = FS_BINARY_MOUNTDATA | FS_REQUIRES_DEV,
};
-#endif
int lustre_register_fs(void)
{
}
EXPORT_SYMBOL(lustre_register_client_fill_super);
+EXPORT_SYMBOL(lustre_register_kill_super_cb);
EXPORT_SYMBOL(lustre_common_put_super);
EXPORT_SYMBOL(lustre_process_log);
EXPORT_SYMBOL(lustre_end_log);