|
@@ -601,6 +601,7 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
|
|
|
struct udf_inode_info *iinfo = UDF_I(inode);
|
|
|
int goal = 0, pgoal = iinfo->i_location.logicalBlockNum;
|
|
|
int lastblock = 0;
|
|
|
+ bool isBeyondEOF;
|
|
|
|
|
|
*err = 0;
|
|
|
*new = 0;
|
|
@@ -680,7 +681,7 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
|
|
|
/* Are we beyond EOF? */
|
|
|
if (etype == -1) {
|
|
|
int ret;
|
|
|
-
|
|
|
+ isBeyondEOF = 1;
|
|
|
if (count) {
|
|
|
if (c)
|
|
|
laarr[0] = laarr[1];
|
|
@@ -723,6 +724,7 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
|
|
|
endnum = c + 1;
|
|
|
lastblock = 1;
|
|
|
} else {
|
|
|
+ isBeyondEOF = 0;
|
|
|
endnum = startnum = ((count > 2) ? 2 : count);
|
|
|
|
|
|
/* if the current extent is in position 0,
|
|
@@ -770,7 +772,8 @@ static sector_t inode_getblk(struct inode *inode, sector_t block,
|
|
|
*err = -ENOSPC;
|
|
|
return 0;
|
|
|
}
|
|
|
- iinfo->i_lenExtents += inode->i_sb->s_blocksize;
|
|
|
+ if (isBeyondEOF)
|
|
|
+ iinfo->i_lenExtents += inode->i_sb->s_blocksize;
|
|
|
}
|
|
|
|
|
|
/* if the extent the requsted block is located in contains multiple
|