diff options
Diffstat (limited to 'fs/hfsplus/super.c')
| -rw-r--r-- | fs/hfsplus/super.c | 11 | 
1 files changed, 9 insertions, 2 deletions
| diff --git a/fs/hfsplus/super.c b/fs/hfsplus/super.c index edf0a801446..427682ca9e4 100644 --- a/fs/hfsplus/super.c +++ b/fs/hfsplus/super.c @@ -499,9 +499,16 @@ static int hfsplus_fill_super(struct super_block *sb, void *data, int silent)  		if (!sbi->hidden_dir) {  			mutex_lock(&sbi->vh_mutex);  			sbi->hidden_dir = hfsplus_new_inode(sb, S_IFDIR); -			hfsplus_create_cat(sbi->hidden_dir->i_ino, root, &str, -					   sbi->hidden_dir); +			if (!sbi->hidden_dir) { +				mutex_unlock(&sbi->vh_mutex); +				err = -ENOMEM; +				goto out_put_root; +			} +			err = hfsplus_create_cat(sbi->hidden_dir->i_ino, root, +						 &str, sbi->hidden_dir);  			mutex_unlock(&sbi->vh_mutex); +			if (err) +				goto out_put_hidden_dir;  			hfsplus_mark_inode_dirty(sbi->hidden_dir,  						 HFSPLUS_I_CAT_DIRTY); | 
