diff options
Diffstat (limited to 'fs/xfs/linux-2.6')
| -rw-r--r-- | fs/xfs/linux-2.6/kmem.c | 4 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_aops.c | 8 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_buf.c | 4 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_file.c | 1 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_iops.c | 4 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_sync.c | 13 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_sync.h | 1 | 
7 files changed, 26 insertions, 9 deletions
diff --git a/fs/xfs/linux-2.6/kmem.c b/fs/xfs/linux-2.6/kmem.c index 1cd3b55ee3d..2d3f90afe5f 100644 --- a/fs/xfs/linux-2.6/kmem.c +++ b/fs/xfs/linux-2.6/kmem.c @@ -53,7 +53,7 @@ kmem_alloc(size_t size, unsigned int __nocast flags)  			printk(KERN_ERR "XFS: possible memory allocation "  					"deadlock in %s (mode:0x%x)\n",  					__func__, lflags); -		congestion_wait(WRITE, HZ/50); +		congestion_wait(BLK_RW_ASYNC, HZ/50);  	} while (1);  } @@ -130,7 +130,7 @@ kmem_zone_alloc(kmem_zone_t *zone, unsigned int __nocast flags)  			printk(KERN_ERR "XFS: possible memory allocation "  					"deadlock in %s (mode:0x%x)\n",  					__func__, lflags); -		congestion_wait(WRITE, HZ/50); +		congestion_wait(BLK_RW_ASYNC, HZ/50);  	} while (1);  } diff --git a/fs/xfs/linux-2.6/xfs_aops.c b/fs/xfs/linux-2.6/xfs_aops.c index 7ec89fc05b2..aecf2519db7 100644 --- a/fs/xfs/linux-2.6/xfs_aops.c +++ b/fs/xfs/linux-2.6/xfs_aops.c @@ -1268,6 +1268,14 @@ xfs_vm_writepage(  	if (!page_has_buffers(page))  		create_empty_buffers(page, 1 << inode->i_blkbits, 0); + +	/* +	 *  VM calculation for nr_to_write seems off.  Bump it way +	 *  up, this gets simple streaming writes zippy again. +	 *  To be reviewed again after Jens' writeback changes. +	 */ +	wbc->nr_to_write *= 4; +  	/*  	 * Convert delayed allocate, unwritten or unmapped space  	 * to real space and flush out to disk. diff --git a/fs/xfs/linux-2.6/xfs_buf.c b/fs/xfs/linux-2.6/xfs_buf.c index 1418b916fc2..965df1227d6 100644 --- a/fs/xfs/linux-2.6/xfs_buf.c +++ b/fs/xfs/linux-2.6/xfs_buf.c @@ -412,7 +412,7 @@ _xfs_buf_lookup_pages(  			XFS_STATS_INC(xb_page_retries);  			xfsbufd_wakeup(0, gfp_mask); -			congestion_wait(WRITE, HZ/50); +			congestion_wait(BLK_RW_ASYNC, HZ/50);  			goto retry;  		} @@ -770,7 +770,7 @@ xfs_buf_associate_memory(  	bp->b_pages = NULL;  	bp->b_addr = mem; -	rval = _xfs_buf_get_pages(bp, page_count, 0); +	rval = _xfs_buf_get_pages(bp, page_count, XBF_DONT_BLOCK);  	if (rval)  		return rval; diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c index f4e25544157..0542fd50764 100644 --- a/fs/xfs/linux-2.6/xfs_file.c +++ b/fs/xfs/linux-2.6/xfs_file.c @@ -41,7 +41,6 @@  #include "xfs_ioctl.h"  #include <linux/dcache.h> -#include <linux/smp_lock.h>  static struct vm_operations_struct xfs_file_vm_ops; diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c index 58973bb4603..8070b34cc28 100644 --- a/fs/xfs/linux-2.6/xfs_iops.c +++ b/fs/xfs/linux-2.6/xfs_iops.c @@ -680,8 +680,8 @@ xfs_vn_fiemap(  	else  		bm.bmv_length = BTOBB(length); -	/* our formatter will tell xfs_getbmap when to stop. */ -	bm.bmv_count = MAXEXTNUM; +	/* We add one because in getbmap world count includes the header */ +	bm.bmv_count = fieinfo->fi_extents_max + 1;  	bm.bmv_iflags = BMV_IF_PREALLOC;  	if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR)  		bm.bmv_iflags |= BMV_IF_ATTRFORK; diff --git a/fs/xfs/linux-2.6/xfs_sync.c b/fs/xfs/linux-2.6/xfs_sync.c index b619d6b8ca4..98ef624d9ba 100644 --- a/fs/xfs/linux-2.6/xfs_sync.c +++ b/fs/xfs/linux-2.6/xfs_sync.c @@ -708,6 +708,16 @@ xfs_reclaim_inode(  	return 0;  } +void +__xfs_inode_set_reclaim_tag( +	struct xfs_perag	*pag, +	struct xfs_inode	*ip) +{ +	radix_tree_tag_set(&pag->pag_ici_root, +			   XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino), +			   XFS_ICI_RECLAIM_TAG); +} +  /*   * We set the inode flag atomically with the radix tree tag.   * Once we get tag lookups on the radix tree, this inode flag @@ -722,8 +732,7 @@ xfs_inode_set_reclaim_tag(  	read_lock(&pag->pag_ici_lock);  	spin_lock(&ip->i_flags_lock); -	radix_tree_tag_set(&pag->pag_ici_root, -			XFS_INO_TO_AGINO(mp, ip->i_ino), XFS_ICI_RECLAIM_TAG); +	__xfs_inode_set_reclaim_tag(pag, ip);  	__xfs_iflags_set(ip, XFS_IRECLAIMABLE);  	spin_unlock(&ip->i_flags_lock);  	read_unlock(&pag->pag_ici_lock); diff --git a/fs/xfs/linux-2.6/xfs_sync.h b/fs/xfs/linux-2.6/xfs_sync.h index 2a10301c99c..59120602588 100644 --- a/fs/xfs/linux-2.6/xfs_sync.h +++ b/fs/xfs/linux-2.6/xfs_sync.h @@ -48,6 +48,7 @@ int xfs_reclaim_inode(struct xfs_inode *ip, int locked, int sync_mode);  int xfs_reclaim_inodes(struct xfs_mount *mp, int mode);  void xfs_inode_set_reclaim_tag(struct xfs_inode *ip); +void __xfs_inode_set_reclaim_tag(struct xfs_perag *pag, struct xfs_inode *ip);  void xfs_inode_clear_reclaim_tag(struct xfs_inode *ip);  void __xfs_inode_clear_reclaim_tag(struct xfs_mount *mp, struct xfs_perag *pag,  				struct xfs_inode *ip);  |