diff options
author | Jeff Mahoney <jeffm@suse.com> | 2009-07-07 17:22:12 -0400 |
---|---|---|
committer | Joel Becker <joel.becker@oracle.com> | 2009-07-08 18:34:02 -0400 |
commit | 8b712cd58adfe6aeeb0be4ecc011dc35620719e7 (patch) | |
tree | 98a0cdc0b210392fc0fd0feb464603224c2863b1 /fs/ocfs2/super.c | |
parent | 44b572809581d5a10dbe35aa6bf689f32b9c5ad6 (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.c | 4 |
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"); |