diff options
author | Jan Kara <jack@suse.cz> | 2009-07-30 17:01:53 +0200 |
---|---|---|
committer | Joel Becker <joel.becker@oracle.com> | 2009-08-17 14:32:24 -0700 |
commit | 5fd131893793567c361ae64cbeb28a2a753bbe35 (patch) | |
tree | 962a79225308d855ee7b1d27e5c49864af78e108 /fs/ocfs2/super.c | |
parent | 60e2ec48665b8495360ca4a6004c5cd52beb2bc1 (diff) | |
download | lwn-5fd131893793567c361ae64cbeb28a2a753bbe35.tar.gz lwn-5fd131893793567c361ae64cbeb28a2a753bbe35.zip |
ocfs2: Don't oops in ocfs2_kill_sb on a failed mount
If we fail to mount the filesystem, we have to be careful not to dereference
uninitialized structures in ocfs2_kill_sb.
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
Diffstat (limited to 'fs/ocfs2/super.c')
-rw-r--r-- | fs/ocfs2/super.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c index b0ee0fdf799a..a3f8871d21fd 100644 --- a/fs/ocfs2/super.c +++ b/fs/ocfs2/super.c @@ -1218,13 +1218,17 @@ static void ocfs2_kill_sb(struct super_block *sb) { struct ocfs2_super *osb = OCFS2_SB(sb); + /* Failed mount? */ + if (!osb || atomic_read(&osb->vol_state) == VOLUME_DISABLED) + goto out; + /* Prevent further queueing of inode drop events */ spin_lock(&dentry_list_lock); ocfs2_set_osb_flag(osb, OCFS2_OSB_DROP_DENTRY_LOCK_IMMED); spin_unlock(&dentry_list_lock); /* Wait for work to finish and/or remove it */ cancel_work_sync(&osb->dentry_lock_work); - +out: kill_block_super(sb); } |