aboutsummaryrefslogtreecommitdiffstats
path: root/fs/udf
diff options
context:
space:
mode:
authorFabian Frederick <fabf@skynet.be>2017-01-06 15:53:51 -0500
committerJan Kara <jack@suse.cz>2017-01-10 05:36:35 -0500
commit02d4ca49fa222021988b2791c8efefd70d3228ac (patch)
treecdd0c7b34e5df792fdace421b37fa6980052b552 /fs/udf
parent3cc6f8444a9d9e4a167c575e4da7b6c6d626501a (diff)
udf: merge bh free
Merge all bh free at one place. Signed-off-by: Fabian Frederick <fabf@skynet.be> Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/udf')
-rw-r--r--fs/udf/inode.c28
1 files changed, 10 insertions, 18 deletions
diff --git a/fs/udf/inode.c b/fs/udf/inode.c
index 8d8eda8379ca..582d6b2f0d5f 100644
--- a/fs/udf/inode.c
+++ b/fs/udf/inode.c
@@ -745,11 +745,8 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
745 ~(inode->i_sb->s_blocksize - 1)); 745 ~(inode->i_sb->s_blocksize - 1));
746 udf_write_aext(inode, &cur_epos, &eloc, elen, 1); 746 udf_write_aext(inode, &cur_epos, &eloc, elen, 1);
747 } 747 }
748 brelse(prev_epos.bh);
749 brelse(cur_epos.bh);
750 brelse(next_epos.bh);
751 newblock = udf_get_lb_pblock(inode->i_sb, &eloc, offset); 748 newblock = udf_get_lb_pblock(inode->i_sb, &eloc, offset);
752 return newblock; 749 goto out_free;
753 } 750 }
754 751
755 /* Are we beyond EOF? */ 752 /* Are we beyond EOF? */
@@ -772,11 +769,9 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
772 /* Create extents for the hole between EOF and offset */ 769 /* Create extents for the hole between EOF and offset */
773 ret = udf_do_extend_file(inode, &prev_epos, laarr, offset); 770 ret = udf_do_extend_file(inode, &prev_epos, laarr, offset);
774 if (ret < 0) { 771 if (ret < 0) {
775 brelse(prev_epos.bh);
776 brelse(cur_epos.bh);
777 brelse(next_epos.bh);
778 *err = ret; 772 *err = ret;
779 return 0; 773 newblock = 0;
774 goto out_free;
780 } 775 }
781 c = 0; 776 c = 0;
782 offset = 0; 777 offset = 0;
@@ -839,11 +834,9 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
839 iinfo->i_location.partitionReferenceNum, 834 iinfo->i_location.partitionReferenceNum,
840 goal, err); 835 goal, err);
841 if (!newblocknum) { 836 if (!newblocknum) {
842 brelse(prev_epos.bh);
843 brelse(cur_epos.bh);
844 brelse(next_epos.bh);
845 *err = -ENOSPC; 837 *err = -ENOSPC;
846 return 0; 838 newblock = 0;
839 goto out_free;
847 } 840 }
848 if (isBeyondEOF) 841 if (isBeyondEOF)
849 iinfo->i_lenExtents += inode->i_sb->s_blocksize; 842 iinfo->i_lenExtents += inode->i_sb->s_blocksize;
@@ -870,15 +863,11 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
870 * the new number of extents is less than the old number */ 863 * the new number of extents is less than the old number */
871 udf_update_extents(inode, laarr, startnum, endnum, &prev_epos); 864 udf_update_extents(inode, laarr, startnum, endnum, &prev_epos);
872 865
873 brelse(prev_epos.bh);
874 brelse(cur_epos.bh);
875 brelse(next_epos.bh);
876
877 newblock = udf_get_pblock(inode->i_sb, newblocknum, 866 newblock = udf_get_pblock(inode->i_sb, newblocknum,
878 iinfo->i_location.partitionReferenceNum, 0); 867 iinfo->i_location.partitionReferenceNum, 0);
879 if (!newblock) { 868 if (!newblock) {
880 *err = -EIO; 869 *err = -EIO;
881 return 0; 870 goto out_free;
882 } 871 }
883 *new = 1; 872 *new = 1;
884 iinfo->i_next_alloc_block = block; 873 iinfo->i_next_alloc_block = block;
@@ -889,7 +878,10 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
889 udf_sync_inode(inode); 878 udf_sync_inode(inode);
890 else 879 else
891 mark_inode_dirty(inode); 880 mark_inode_dirty(inode);
892 881out_free:
882 brelse(prev_epos.bh);
883 brelse(cur_epos.bh);
884 brelse(next_epos.bh);
893 return newblock; 885 return newblock;
894} 886}
895 887