diff options
| -rw-r--r-- | fs/udf/ialloc.c | 41 | 
1 files changed, 18 insertions, 23 deletions
diff --git a/fs/udf/ialloc.c b/fs/udf/ialloc.c index c4943c8988c..a4f2b3ce45b 100644 --- a/fs/udf/ialloc.c +++ b/fs/udf/ialloc.c @@ -76,11 +76,24 @@ struct inode *udf_new_inode(struct inode *dir, int mode, int *err)  	*err = -ENOSPC;  	iinfo = UDF_I(inode); -	iinfo->i_unique = 0; -	iinfo->i_lenExtents = 0; -	iinfo->i_next_alloc_block = 0; -	iinfo->i_next_alloc_goal = 0; -	iinfo->i_strat4096 = 0; +	if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_EXTENDED_FE)) { +		iinfo->i_efe = 1; +		if (UDF_VERS_USE_EXTENDED_FE > sbi->s_udfrev) +			sbi->s_udfrev = UDF_VERS_USE_EXTENDED_FE; +		iinfo->i_ext.i_data = kzalloc(inode->i_sb->s_blocksize - +					    sizeof(struct extendedFileEntry), +					    GFP_KERNEL); +	} else { +		iinfo->i_efe = 0; +		iinfo->i_ext.i_data = kzalloc(inode->i_sb->s_blocksize - +					    sizeof(struct fileEntry), +					    GFP_KERNEL); +	} +	if (!iinfo->i_ext.i_data) { +		iput(inode); +		*err = -ENOMEM; +		return NULL; +	}  	block = udf_new_block(dir->i_sb, NULL,  			      dinfo->i_location.partitionReferenceNum, @@ -130,24 +143,6 @@ struct inode *udf_new_inode(struct inode *dir, int mode, int *err)  	iinfo->i_lenEAttr = 0;  	iinfo->i_lenAlloc = 0;  	iinfo->i_use = 0; -	if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_EXTENDED_FE)) { -		iinfo->i_efe = 1; -		if (UDF_VERS_USE_EXTENDED_FE > sbi->s_udfrev) -			sbi->s_udfrev = UDF_VERS_USE_EXTENDED_FE; -		iinfo->i_ext.i_data = kzalloc(inode->i_sb->s_blocksize - -					    sizeof(struct extendedFileEntry), -					    GFP_KERNEL); -	} else { -		iinfo->i_efe = 0; -		iinfo->i_ext.i_data = kzalloc(inode->i_sb->s_blocksize - -					    sizeof(struct fileEntry), -					    GFP_KERNEL); -	} -	if (!iinfo->i_ext.i_data) { -		iput(inode); -		*err = -ENOMEM; -		return NULL; -	}  	if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_AD_IN_ICB))  		iinfo->i_alloc_type = ICBTAG_FLAG_AD_IN_ICB;  	else if (UDF_QUERY_FLAG(inode->i_sb, UDF_FLAG_USE_SHORT_AD))  |