diff options
Diffstat (limited to 'fs/xfs')
| -rw-r--r-- | fs/xfs/xfs_buf.c | 6 | ||||
| -rw-r--r-- | fs/xfs/xfs_iomap.c | 4 | ||||
| -rw-r--r-- | fs/xfs/xfs_super.c | 1 | 
3 files changed, 9 insertions, 2 deletions
diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c index 4e8f0df82d0..8459b5d8cb7 100644 --- a/fs/xfs/xfs_buf.c +++ b/fs/xfs/xfs_buf.c @@ -1334,6 +1334,12 @@ _xfs_buf_ioapply(  	int		size;  	int		i; +	/* +	 * Make sure we capture only current IO errors rather than stale errors +	 * left over from previous use of the buffer (e.g. failed readahead). +	 */ +	bp->b_error = 0; +  	if (bp->b_flags & XBF_WRITE) {  		if (bp->b_flags & XBF_SYNCIO)  			rw = WRITE_SYNC; diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c index 912d83d8860..5a30dd899d2 100644 --- a/fs/xfs/xfs_iomap.c +++ b/fs/xfs/xfs_iomap.c @@ -325,7 +325,7 @@ xfs_iomap_eof_want_preallocate(   * rather than falling short due to things like stripe unit/width alignment of   * real extents.   */ -STATIC int +STATIC xfs_fsblock_t  xfs_iomap_eof_prealloc_initial_size(  	struct xfs_mount	*mp,  	struct xfs_inode	*ip, @@ -413,7 +413,7 @@ xfs_iomap_prealloc_size(  		 * have a large file on a small filesystem and the above  		 * lowspace thresholds are smaller than MAXEXTLEN.  		 */ -		while (alloc_blocks >= freesp) +		while (alloc_blocks && alloc_blocks >= freesp)  			alloc_blocks >>= 4;  	} diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index c407121873b..ea341cea68c 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -1561,6 +1561,7 @@ static struct file_system_type xfs_fs_type = {  	.kill_sb		= kill_block_super,  	.fs_flags		= FS_REQUIRES_DEV,  }; +MODULE_ALIAS_FS("xfs");  STATIC int __init  xfs_init_zones(void)  |