diff options
author | Namjae Jeon <namjae.jeon@samsung.com> | 2012-10-09 11:09:12 -0400 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2012-12-13 10:33:23 -0500 |
commit | fb719c59bdb4fca86ee1fd1f42ab3735ca12b6b2 (patch) | |
tree | 0228973d626851649787d383e959b97bba83b1d0 | |
parent | 2fb7d99d0de3fd8ae869f35ab682581d8455887a (diff) |
udf: don't increment lenExtents while writing to a hole
Incrementing lenExtents even while writing to a hole is bad
for performance as calls to udf_discard_prealloc and
udf_truncate_tail_extent would not return from start if
isize != lenExtents
Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com>
Signed-off-by: Ashish Sangwan <a.sangwan@samsung.com>
Signed-off-by: Jan Kara <jack@suse.cz>
-rw-r--r-- | fs/udf/inode.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 2b7759371ff6..8266f2ed7fc4 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c | |||
@@ -601,6 +601,7 @@ static sector_t inode_getblk(struct inode *inode, sector_t block, | |||
601 | struct udf_inode_info *iinfo = UDF_I(inode); | 601 | struct udf_inode_info *iinfo = UDF_I(inode); |
602 | int goal = 0, pgoal = iinfo->i_location.logicalBlockNum; | 602 | int goal = 0, pgoal = iinfo->i_location.logicalBlockNum; |
603 | int lastblock = 0; | 603 | int lastblock = 0; |
604 | bool isBeyondEOF; | ||
604 | 605 | ||
605 | *err = 0; | 606 | *err = 0; |
606 | *new = 0; | 607 | *new = 0; |
@@ -680,7 +681,7 @@ static sector_t inode_getblk(struct inode *inode, sector_t block, | |||
680 | /* Are we beyond EOF? */ | 681 | /* Are we beyond EOF? */ |
681 | if (etype == -1) { | 682 | if (etype == -1) { |
682 | int ret; | 683 | int ret; |
683 | 684 | isBeyondEOF = 1; | |
684 | if (count) { | 685 | if (count) { |
685 | if (c) | 686 | if (c) |
686 | laarr[0] = laarr[1]; | 687 | laarr[0] = laarr[1]; |
@@ -723,6 +724,7 @@ static sector_t inode_getblk(struct inode *inode, sector_t block, | |||
723 | endnum = c + 1; | 724 | endnum = c + 1; |
724 | lastblock = 1; | 725 | lastblock = 1; |
725 | } else { | 726 | } else { |
727 | isBeyondEOF = 0; | ||
726 | endnum = startnum = ((count > 2) ? 2 : count); | 728 | endnum = startnum = ((count > 2) ? 2 : count); |
727 | 729 | ||
728 | /* if the current extent is in position 0, | 730 | /* if the current extent is in position 0, |
@@ -770,7 +772,8 @@ static sector_t inode_getblk(struct inode *inode, sector_t block, | |||
770 | *err = -ENOSPC; | 772 | *err = -ENOSPC; |
771 | return 0; | 773 | return 0; |
772 | } | 774 | } |
773 | iinfo->i_lenExtents += inode->i_sb->s_blocksize; | 775 | if (isBeyondEOF) |
776 | iinfo->i_lenExtents += inode->i_sb->s_blocksize; | ||
774 | } | 777 | } |
775 | 778 | ||
776 | /* if the extent the requsted block is located in contains multiple | 779 | /* if the extent the requsted block is located in contains multiple |