aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNamjae Jeon <namjae.jeon@samsung.com>2012-10-09 11:09:12 -0400
committerJan Kara <jack@suse.cz>2012-12-13 10:33:23 -0500
commitfb719c59bdb4fca86ee1fd1f42ab3735ca12b6b2 (patch)
tree0228973d626851649787d383e959b97bba83b1d0
parent2fb7d99d0de3fd8ae869f35ab682581d8455887a (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.c7
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