aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/super.c
diff options
context:
space:
mode:
authorJeff Mahoney <jeffm@suse.com>2009-07-07 17:22:12 -0400
committerJoel Becker <joel.becker@oracle.com>2009-07-08 18:34:02 -0400
commit8b712cd58adfe6aeeb0be4ecc011dc35620719e7 (patch)
tree98a0cdc0b210392fc0fd0feb464603224c2863b1 /fs/ocfs2/super.c
parent44b572809581d5a10dbe35aa6bf689f32b9c5ad6 (diff)
ocfs2: Fixup orphan scan cleanup after failed mount
If the mount fails for any reason, ocfs2_dismount_volume calls ocfs2_orphan_scan_stop. It requires that ocfs2_orphan_scan_init be called to setup the mutex and work queues, but that doesn't happen if the mount has failed and we oops accessing an uninitialized work queue. This patch splits the init and startup of the orphan scan, eliminating the oops. Signed-off-by: Jeff Mahoney <jeffm@suse.com> Signed-off-by: Joel Becker <joel.becker@oracle.com>
Diffstat (limited to 'fs/ocfs2/super.c')
-rw-r--r--fs/ocfs2/super.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
index 7efb349fb9bd..63af2e36d834 100644
--- a/fs/ocfs2/super.c
+++ b/fs/ocfs2/super.c
@@ -1182,7 +1182,7 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent)
1182 wake_up(&osb->osb_mount_event); 1182 wake_up(&osb->osb_mount_event);
1183 1183
1184 /* Start this when the mount is almost sure of being successful */ 1184 /* Start this when the mount is almost sure of being successful */
1185 ocfs2_orphan_scan_init(osb); 1185 ocfs2_orphan_scan_start(osb);
1186 1186
1187 mlog_exit(status); 1187 mlog_exit(status);
1188 return status; 1188 return status;
@@ -1981,6 +1981,8 @@ static int ocfs2_initialize_super(struct super_block *sb,
1981 snprintf(osb->dev_str, sizeof(osb->dev_str), "%u,%u", 1981 snprintf(osb->dev_str, sizeof(osb->dev_str), "%u,%u",
1982 MAJOR(osb->sb->s_dev), MINOR(osb->sb->s_dev)); 1982 MAJOR(osb->sb->s_dev), MINOR(osb->sb->s_dev));
1983 1983
1984 ocfs2_orphan_scan_init(osb);
1985
1984 status = ocfs2_recovery_init(osb); 1986 status = ocfs2_recovery_init(osb);
1985 if (status) { 1987 if (status) {
1986 mlog(ML_ERROR, "Unable to initialize recovery state\n"); 1988 mlog(ML_ERROR, "Unable to initialize recovery state\n");