packages: kernel/kernel-aufs2-unionfs.patch, kernel/kernel-small_fixes.patc...

arekm arekm at pld-linux.org
Mon Oct 24 21:03:59 CEST 2011


Author: arekm                        Date: Mon Oct 24 19:03:59 2011 GMT
Module: packages                      Tag: HEAD
---- Log message:
- update for 3.1

---- Files affected:
packages/kernel:
   kernel-aufs2-unionfs.patch (1.5 -> 1.6) , kernel-small_fixes.patch (1.43 -> 1.44) 

---- Diffs:

================================================================
Index: packages/kernel/kernel-aufs2-unionfs.patch
diff -u packages/kernel/kernel-aufs2-unionfs.patch:1.5 packages/kernel/kernel-aufs2-unionfs.patch:1.6
--- packages/kernel/kernel-aufs2-unionfs.patch:1.5	Mon Jul 11 22:01:50 2011
+++ packages/kernel/kernel-aufs2-unionfs.patch	Mon Oct 24 21:03:53 2011
@@ -46,7 +46,7 @@
 @@ -82,11 +82,11 @@ extern int vfs_path_lookup(struct dentry *, struct vfsmount *,
  extern int kern_path_parent(const char *, struct nameidata *);
  extern int vfs_path_lookup(struct dentry *, struct vfsmount *,
- 			   const char *, unsigned int, struct nameidata *);
+ 			   const char *, unsigned int, struct path *);
 +extern struct dentry *lookup_hash(struct nameidata *nd);
  
  extern struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry,
@@ -60,16 +60,16 @@
 index 997c3b4..be9a153 100644
 --- a/include/linux/splice.h
 +++ b/include/linux/splice.h
-@@ -89,10 +89,4 @@ extern int splice_grow_spd(struct pipe_inode_info *, struct splice_pipe_desc *);
- extern void splice_shrink_spd(struct pipe_inode_info *,
- 				struct splice_pipe_desc *);
+@@ -91,10 +91,4 @@ extern void splice_shrink_spd(struct pip
+ extern void spd_release_page(struct splice_pipe_desc *, unsigned int);
  
+ extern const struct pipe_buf_operations page_cache_pipe_buf_ops;
+-
 -extern long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
 -			   loff_t *ppos, size_t len, unsigned int flags);
 -extern long do_splice_to(struct file *in, loff_t *ppos,
 -			 struct pipe_inode_info *pipe, size_t len,
 -			 unsigned int flags);
--
  #endif
 aufs2 standalone patch for linux-2.6.35
 

================================================================
Index: packages/kernel/kernel-small_fixes.patch
diff -u packages/kernel/kernel-small_fixes.patch:1.43 packages/kernel/kernel-small_fixes.patch:1.44
--- packages/kernel/kernel-small_fixes.patch:1.43	Wed Oct 19 22:20:43 2011
+++ packages/kernel/kernel-small_fixes.patch	Mon Oct 24 21:03:53 2011
@@ -136,203 +136,6 @@
 the body of a message to majordomo at vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
 Please read the FAQ at  http://www.tux.org/lkml/
-commit 3326c784c9f492e988617d93f647ae0cfd4c8d09
-Author: Jiri Pirko <jpirko at redhat.com>
-Date:   Wed Jul 20 04:54:38 2011 +0000
-
-    forcedeth: do vlan cleanup
-    
-    - unify vlan and nonvlan rx path
-    - kill np->vlangrp and nv_vlan_rx_register
-    - allow to turn on/off rx vlan accel via ethtool (set_features)
-    
-    Signed-off-by: Jiri Pirko <jpirko at redhat.com>
-    Signed-off-by: David S. Miller <davem at davemloft.net>
-
-diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c
-index 537b695..e64cd9c 100644
---- a/drivers/net/forcedeth.c
-+++ b/drivers/net/forcedeth.c
-@@ -820,9 +820,6 @@ struct fe_priv {
- 	struct nv_skb_map *tx_end_flip;
- 	int tx_stop;
- 
--	/* vlan fields */
--	struct vlan_group *vlangrp;
--
- 	/* msi/msi-x fields */
- 	u32 msi_flags;
- 	struct msix_entry msi_x_entry[NV_MSI_X_MAX_VECTORS];
-@@ -2766,17 +2763,13 @@ static int nv_rx_process_optimized(struct net_device *dev, int limit)
- 			skb->protocol = eth_type_trans(skb, dev);
- 			prefetch(skb->data);
- 
--			if (likely(!np->vlangrp)) {
--				napi_gro_receive(&np->napi, skb);
--			} else {
--				vlanflags = le32_to_cpu(np->get_rx.ex->buflow);
--				if (vlanflags & NV_RX3_VLAN_TAG_PRESENT) {
--					vlan_gro_receive(&np->napi, np->vlangrp,
--							 vlanflags & NV_RX3_VLAN_TAG_MASK, skb);
--				} else {
--					napi_gro_receive(&np->napi, skb);
--				}
-+			vlanflags = le32_to_cpu(np->get_rx.ex->buflow);
-+			if (vlanflags & NV_RX3_VLAN_TAG_PRESENT) {
-+				u16 vid = vlanflags & NV_RX3_VLAN_TAG_MASK;
-+
-+				__vlan_hwaccel_put_tag(skb, vid);
- 			}
-+			napi_gro_receive(&np->napi, skb);
- 
- 			dev->stats.rx_packets++;
- 			dev->stats.rx_bytes += len;
-@@ -4484,6 +4477,27 @@ static u32 nv_fix_features(struct net_device *dev, u32 features)
- 	return features;
- }
- 
-+static void nv_vlan_mode(struct net_device *dev, u32 features)
-+{
-+	struct fe_priv *np = get_nvpriv(dev);
-+
-+	spin_lock_irq(&np->lock);
-+
-+	if (features & NETIF_F_HW_VLAN_RX)
-+		np->txrxctl_bits |= NVREG_TXRXCTL_VLANSTRIP;
-+	else
-+		np->txrxctl_bits &= ~NVREG_TXRXCTL_VLANSTRIP;
-+
-+	if (features & NETIF_F_HW_VLAN_TX)
-+		np->txrxctl_bits |= NVREG_TXRXCTL_VLANINS;
-+	else
-+		np->txrxctl_bits &= ~NVREG_TXRXCTL_VLANINS;
-+
-+	writel(np->txrxctl_bits, get_hwbase(dev) + NvRegTxRxControl);
-+
-+	spin_unlock_irq(&np->lock);
-+}
-+
- static int nv_set_features(struct net_device *dev, u32 features)
- {
- 	struct fe_priv *np = netdev_priv(dev);
-@@ -4504,6 +4518,9 @@ static int nv_set_features(struct net_device *dev, u32 features)
- 		spin_unlock_irq(&np->lock);
- 	}
- 
-+	if (changed & (NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX))
-+		nv_vlan_mode(dev, features);
-+
- 	return 0;
- }
- 
-@@ -4879,29 +4896,6 @@ static const struct ethtool_ops ops = {
- 	.self_test = nv_self_test,
- };
- 
--static void nv_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
--{
--	struct fe_priv *np = get_nvpriv(dev);
--
--	spin_lock_irq(&np->lock);
--
--	/* save vlan group */
--	np->vlangrp = grp;
--
--	if (grp) {
--		/* enable vlan on MAC */
--		np->txrxctl_bits |= NVREG_TXRXCTL_VLANSTRIP | NVREG_TXRXCTL_VLANINS;
--	} else {
--		/* disable vlan on MAC */
--		np->txrxctl_bits &= ~NVREG_TXRXCTL_VLANSTRIP;
--		np->txrxctl_bits &= ~NVREG_TXRXCTL_VLANINS;
--	}
--
--	writel(np->txrxctl_bits, get_hwbase(dev) + NvRegTxRxControl);
--
--	spin_unlock_irq(&np->lock);
--}
--
- /* The mgmt unit and driver use a semaphore to access the phy during init */
- static int nv_mgmt_acquire_sema(struct net_device *dev)
- {
-@@ -5208,7 +5202,6 @@ static const struct net_device_ops nv_netdev_ops = {
- 	.ndo_validate_addr	= eth_validate_addr,
- 	.ndo_set_mac_address	= nv_set_mac_address,
- 	.ndo_set_multicast_list	= nv_set_multicast,
--	.ndo_vlan_rx_register	= nv_vlan_rx_register,
- #ifdef CONFIG_NET_POLL_CONTROLLER
- 	.ndo_poll_controller	= nv_poll_controller,
- #endif
-@@ -5226,7 +5219,6 @@ static const struct net_device_ops nv_netdev_ops_optimized = {
- 	.ndo_validate_addr	= eth_validate_addr,
- 	.ndo_set_mac_address	= nv_set_mac_address,
- 	.ndo_set_multicast_list	= nv_set_multicast,
--	.ndo_vlan_rx_register	= nv_vlan_rx_register,
- #ifdef CONFIG_NET_POLL_CONTROLLER
- 	.ndo_poll_controller	= nv_poll_controller,
- #endif
-commit 0891b0e08937aaec2c4734acb94c5ff8042313bb
-Author: Jiri Pirko <jpirko at redhat.com>
-Date:   Tue Jul 26 10:19:28 2011 +0000
-
-    forcedeth: fix vlans
-    
-    For some reason, when rxaccel is disabled, NV_RX3_VLAN_TAG_PRESENT is
-    still set and some pseudorandom vids appear. So check for
-    NETIF_F_HW_VLAN_RX as well. Also set correctly hw_features and set vlan
-    mode on probe.
-    
-    Signed-off-by: Jiri Pirko <jpirko at redhat.com>
-    Signed-off-by: David S. Miller <davem at davemloft.net>
-
-diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c
-index e64cd9c..e55df30 100644
---- a/drivers/net/forcedeth.c
-+++ b/drivers/net/forcedeth.c
-@@ -2764,7 +2764,14 @@ static int nv_rx_process_optimized(struct net_device *dev, int limit)
- 			prefetch(skb->data);
- 
- 			vlanflags = le32_to_cpu(np->get_rx.ex->buflow);
--			if (vlanflags & NV_RX3_VLAN_TAG_PRESENT) {
-+
-+			/*
-+			 * There's need to check for NETIF_F_HW_VLAN_RX here.
-+			 * Even if vlan rx accel is disabled,
-+			 * NV_RX3_VLAN_TAG_PRESENT is pseudo randomly set.
-+			 */
-+			if (dev->features & NETIF_F_HW_VLAN_RX &&
-+			    vlanflags & NV_RX3_VLAN_TAG_PRESENT) {
- 				u16 vid = vlanflags & NV_RX3_VLAN_TAG_MASK;
- 
- 				__vlan_hwaccel_put_tag(skb, vid);
-@@ -5331,15 +5338,16 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
- 		np->txrxctl_bits |= NVREG_TXRXCTL_RXCHECK;
- 		dev->hw_features |= NETIF_F_IP_CSUM | NETIF_F_SG |
- 			NETIF_F_TSO | NETIF_F_RXCSUM;
--		dev->features |= dev->hw_features;
- 	}
- 
- 	np->vlanctl_bits = 0;
- 	if (id->driver_data & DEV_HAS_VLAN) {
- 		np->vlanctl_bits = NVREG_VLANCONTROL_ENABLE;
--		dev->features |= NETIF_F_HW_VLAN_RX | NETIF_F_HW_VLAN_TX;
-+		dev->hw_features |= NETIF_F_HW_VLAN_RX | NETIF_F_HW_VLAN_TX;
- 	}
- 
-+	dev->features |= dev->hw_features;
-+
- 	np->pause_flags = NV_PAUSEFRAME_RX_CAPABLE | NV_PAUSEFRAME_RX_REQ | NV_PAUSEFRAME_AUTONEG;
- 	if ((id->driver_data & DEV_HAS_PAUSEFRAME_TX_V1) ||
- 	    (id->driver_data & DEV_HAS_PAUSEFRAME_TX_V2) ||
-@@ -5607,6 +5615,8 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
- 		goto out_error;
- 	}
- 
-+	nv_vlan_mode(dev, dev->features);
-+
- 	netif_carrier_off(dev);
- 
- 	dev_info(&pci_dev->dev, "ifname %s, PHY OUI 0x%x @ %d, addr %pM\n",
 --- linux-3.0/scripts/kconfig/lxdialog/check-lxdialog.sh~	2011-07-22 04:17:23.000000000 +0200
 +++ linux-3.0/scripts/kconfig/lxdialog/check-lxdialog.sh	2011-08-25 21:26:04.799150642 +0200
 @@ -9,6 +9,12 @@
@@ -348,887 +151,6 @@
  				exit
  			fi
  		done
-commit 37b652ec6445be99d0193047d1eda129a1a315d3
-Author: Dave Chinner <dchinner at redhat.com>
-Date:   Thu Aug 25 07:17:01 2011 +0000
-
-    xfs: don't serialise direct IO reads on page cache checks
-    
-    There is no need to grab the i_mutex of the IO lock in exclusive
-    mode if we don't need to invalidate the page cache. Taking these
-    locks on every direct IO effective serialises them as taking the IO
-    lock in exclusive mode has to wait for all shared holders to drop
-    the lock. That only happens when IO is complete, so effective it
-    prevents dispatch of concurrent direct IO reads to the same inode.
-    
-    Fix this by taking the IO lock shared to check the page cache state,
-    and only then drop it and take the IO lock exclusively if there is
-    work to be done. Hence for the normal direct IO case, no exclusive
-    locking will occur.
-    
-    Signed-off-by: Dave Chinner <dchinner at redhat.com>
-    Tested-by: Joern Engel <joern at logfs.org>
-    Reviewed-by: Christoph Hellwig <hch at lst.de>
-    Signed-off-by: Alex Elder <aelder at sgi.com>
-
-diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c
-index 7f7b424..8fd4a07 100644
---- a/fs/xfs/linux-2.6/xfs_file.c
-+++ b/fs/xfs/linux-2.6/xfs_file.c
-@@ -317,7 +317,19 @@ xfs_file_aio_read(
- 	if (XFS_FORCED_SHUTDOWN(mp))
- 		return -EIO;
- 
--	if (unlikely(ioflags & IO_ISDIRECT)) {
-+	/*
-+	 * Locking is a bit tricky here. If we take an exclusive lock
-+	 * for direct IO, we effectively serialise all new concurrent
-+	 * read IO to this file and block it behind IO that is currently in
-+	 * progress because IO in progress holds the IO lock shared. We only
-+	 * need to hold the lock exclusive to blow away the page cache, so
-+	 * only take lock exclusively if the page cache needs invalidation.
-+	 * This allows the normal direct IO case of no page cache pages to
-+	 * proceeed concurrently without serialisation.
-+	 */
-+	xfs_rw_ilock(ip, XFS_IOLOCK_SHARED);
-+	if ((ioflags & IO_ISDIRECT) && inode->i_mapping->nrpages) {
-+		xfs_rw_iunlock(ip, XFS_IOLOCK_SHARED);
- 		xfs_rw_ilock(ip, XFS_IOLOCK_EXCL);
- 
- 		if (inode->i_mapping->nrpages) {
-@@ -330,8 +342,7 @@ xfs_file_aio_read(
- 			}
- 		}
- 		xfs_rw_ilock_demote(ip, XFS_IOLOCK_EXCL);
--	} else
--		xfs_rw_ilock(ip, XFS_IOLOCK_SHARED);
-+	}
- 
- 	trace_xfs_file_read(ip, size, iocb->ki_pos, ioflags);
- 
-
-
-
-Start the periodic sync workers only after we have finished xfs_mountfs
-and thus fully set up the filesystem structures.  Without this we can
-call into xfs_qm_sync before the quotainfo strucute is set up if the
-mount takes unusually long, and probably hit other incomplete states
-as well.
-    
-Also clean up the xfs_fs_fill_super error path by using consistent
-label names, and removing an impossible to reach case.
-
-Signed-off-by: Christoph Hellwig <hch at lst.de>
-Reported-by: Arkadiusz Miskiewicz <arekm at maven.pl>
-Reviewed-by: Alex Elder <aelder at sgi.com>
-
-diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c
-index a1a881e..3ebb458 100644
---- a/fs/xfs/linux-2.6/xfs_super.c
-+++ b/fs/xfs/linux-2.6/xfs_super.c
-@@ -1412,37 +1412,35 @@ xfs_fs_fill_super(
- 	sb->s_time_gran = 1;
- 	set_posix_acl_flag(sb);
- 
--	error = xfs_syncd_init(mp);
--	if (error)
--		goto out_filestream_unmount;
--
- 	xfs_inode_shrinker_register(mp);
- 
- 	error = xfs_mountfs(mp);
- 	if (error)
--		goto out_syncd_stop;
-+		goto out_filestream_unmount;
-+
-+	error = xfs_syncd_init(mp);
-+	if (error)
-+		goto out_unmount;
- 
- 	root = igrab(VFS_I(mp->m_rootip));
- 	if (!root) {
- 		error = ENOENT;
--		goto fail_unmount;
-+		goto out_syncd_stop;
- 	}
- 	if (is_bad_inode(root)) {
- 		error = EINVAL;
--		goto fail_vnrele;
-+		goto out_syncd_stop;
- 	}
- 	sb->s_root = d_alloc_root(root);
- 	if (!sb->s_root) {
- 		error = ENOMEM;
--		goto fail_vnrele;
-+		goto out_iput;
- 	}
- 
- 	return 0;
- 
-- out_syncd_stop:
--	xfs_inode_shrinker_unregister(mp);
--	xfs_syncd_stop(mp);
-  out_filestream_unmount:
-+	xfs_inode_shrinker_unregister(mp);
- 	xfs_filestream_unmount(mp);
-  out_free_sb:
- 	xfs_freesb(mp);
-@@ -1456,17 +1454,12 @@ xfs_fs_fill_super(
-  out:
- 	return -error;
- 
-- fail_vnrele:
--	if (sb->s_root) {
--		dput(sb->s_root);
--		sb->s_root = NULL;
--	} else {
--		iput(root);
--	}
--
-- fail_unmount:
--	xfs_inode_shrinker_unregister(mp);
-+ out_iput:
-+	iput(root);
-+ out_syncd_stop:
- 	xfs_syncd_stop(mp);
-+ out_unmount:
-+	xfs_inode_shrinker_unregister(mp);
- 
- 	/*
- 	 * Blow away any referenced inode in the filestreams cache.
-
-_______________________________________________
-xfs mailing list
-xfs at oss.sgi.com
-http://oss.sgi.com/mailman/listinfo/xfs
-
-
-From: Dave Chinner <dchinner at redhat.com>
-
-commit 1d8c95a363bf8cd4d4182dd19c01693b635311c2 upstream
-
-
-xfs: use a cursor for bulk AIL insertion
-
-Delayed logging can insert tens of thousands of log items into the
-AIL at the same LSN. When the committing of log commit records
-occur, we can get insertions occurring at an LSN that is not at the
-end of the AIL. If there are thousands of items in the AIL on the
-tail LSN, each insertion has to walk the AIL to find the correct
-place to insert the new item into the AIL. This can consume large
-amounts of CPU time and block other operations from occurring while
-the traversals are in progress.
-
-To avoid this repeated walk, use a AIL cursor to record
-where we should be inserting the new items into the AIL without
-having to repeat the walk. The cursor infrastructure already
-provides this functionality for push walks, so is a simple extension
-of existing code. While this will not avoid the initial walk, it
-will avoid repeating it tens of thousands of times during a single
-checkpoint commit.
-
-This version includes logic improvements from Christoph Hellwig.
-
-Signed-off-by: Dave Chinner <dchinner at redhat.com>
-Reviewed-by: Christoph Hellwig <hch at lst.de>
-Signed-off-by: Alex Elder <aelder at sgi.com>
-
-diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c
-index c83f63b..efc147f 100644
---- a/fs/xfs/xfs_trans.c
-+++ b/fs/xfs/xfs_trans.c
-@@ -1426,6 +1426,7 @@ xfs_trans_committed(
- static inline void
- xfs_log_item_batch_insert(
- 	struct xfs_ail		*ailp,
-+	struct xfs_ail_cursor	*cur,
- 	struct xfs_log_item	**log_items,
- 	int			nr_items,
- 	xfs_lsn_t		commit_lsn)
-@@ -1434,7 +1435,7 @@ xfs_log_item_batch_insert(
- 
- 	spin_lock(&ailp->xa_lock);
- 	/* xfs_trans_ail_update_bulk drops ailp->xa_lock */
--	xfs_trans_ail_update_bulk(ailp, log_items, nr_items, commit_lsn);
-+	xfs_trans_ail_update_bulk(ailp, cur, log_items, nr_items, commit_lsn);
- 
- 	for (i = 0; i < nr_items; i++)
- 		IOP_UNPIN(log_items[i], 0);
-@@ -1452,6 +1453,13 @@ xfs_log_item_batch_insert(
-  * as an iclog write error even though we haven't started any IO yet. Hence in
-  * this case all we need to do is IOP_COMMITTED processing, followed by an
-  * IOP_UNPIN(aborted) call.
-+ *
-+ * The AIL cursor is used to optimise the insert process. If commit_lsn is not
-+ * at the end of the AIL, the insert cursor avoids the need to walk
-+ * the AIL to find the insertion point on every xfs_log_item_batch_insert()
-+ * call. This saves a lot of needless list walking and is a net win, even
-+ * though it slightly increases that amount of AIL lock traffic to set it up
-+ * and tear it down.
-  */
- void
- xfs_trans_committed_bulk(
-@@ -1463,8 +1471,13 @@ xfs_trans_committed_bulk(
- #define LOG_ITEM_BATCH_SIZE	32
- 	struct xfs_log_item	*log_items[LOG_ITEM_BATCH_SIZE];
- 	struct xfs_log_vec	*lv;
-+	struct xfs_ail_cursor	cur;
- 	int			i = 0;
- 
-+	spin_lock(&ailp->xa_lock);
-+	xfs_trans_ail_cursor_last(ailp, &cur, commit_lsn);
-+	spin_unlock(&ailp->xa_lock);
-+
- 	/* unpin all the log items */
- 	for (lv = log_vector; lv; lv = lv->lv_next ) {
- 		struct xfs_log_item	*lip = lv->lv_item;
-@@ -1493,7 +1506,9 @@ xfs_trans_committed_bulk(
- 			/*
- 			 * Not a bulk update option due to unusual item_lsn.
- 			 * Push into AIL immediately, rechecking the lsn once
--			 * we have the ail lock. Then unpin the item.
-+			 * we have the ail lock. Then unpin the item. This does
-+			 * not affect the AIL cursor the bulk insert path is
-+			 * using.
- 			 */
- 			spin_lock(&ailp->xa_lock);
- 			if (XFS_LSN_CMP(item_lsn, lip->li_lsn) > 0)
-@@ -1507,7 +1522,7 @@ xfs_trans_committed_bulk(
- 		/* Item is a candidate for bulk AIL insert.  */
- 		log_items[i++] = lv->lv_item;
- 		if (i >= LOG_ITEM_BATCH_SIZE) {
--			xfs_log_item_batch_insert(ailp, log_items,
-+			xfs_log_item_batch_insert(ailp, &cur, log_items,
- 					LOG_ITEM_BATCH_SIZE, commit_lsn);
- 			i = 0;
- 		}
-@@ -1515,7 +1530,11 @@ xfs_trans_committed_bulk(
- 
- 	/* make sure we insert the remainder! */
- 	if (i)
--		xfs_log_item_batch_insert(ailp, log_items, i, commit_lsn);
-+		xfs_log_item_batch_insert(ailp, &cur, log_items, i, commit_lsn);
-+
-+	spin_lock(&ailp->xa_lock);
-+	xfs_trans_ail_cursor_done(ailp, &cur);
-+	spin_unlock(&ailp->xa_lock);
- }
- 
- /*
-diff --git a/fs/xfs/xfs_trans_ail.c b/fs/xfs/xfs_trans_ail.c
-index 5fc2380..9a69dc0 100644
---- a/fs/xfs/xfs_trans_ail.c
-+++ b/fs/xfs/xfs_trans_ail.c
-@@ -272,9 +272,9 @@ xfs_trans_ail_cursor_clear(
- }
- 
- /*
-- * Return the item in the AIL with the current lsn.
-- * Return the current tree generation number for use
-- * in calls to xfs_trans_next_ail().
-+ * Initialise the cursor to the first item in the AIL with the given @lsn.
-+ * This searches the list from lowest LSN to highest. Pass a @lsn of zero
-+ * to initialise the cursor to the first item in the AIL.
-  */
- xfs_log_item_t *
- xfs_trans_ail_cursor_first(
-@@ -300,31 +300,97 @@ out:
- }
- 
- /*
-- * splice the log item list into the AIL at the given LSN.
-+ * Initialise the cursor to the last item in the AIL with the given @lsn.
-+ * This searches the list from highest LSN to lowest. If there is no item with
-+ * the value of @lsn, then it sets the cursor to the last item with an LSN lower
-+ * than @lsn.
-+ */
-+static struct xfs_log_item *
-+__xfs_trans_ail_cursor_last(
-+	struct xfs_ail		*ailp,
-+	xfs_lsn_t		lsn)
-+{
-+	xfs_log_item_t		*lip;
-+
-+	list_for_each_entry_reverse(lip, &ailp->xa_ail, li_ail) {
-+		if (XFS_LSN_CMP(lip->li_lsn, lsn) <= 0)
-+			return lip;
-+	}
-+	return NULL;
-+}
-+
-+/*
-+ * Initialise the cursor to the last item in the AIL with the given @lsn.
-+ * This searches the list from highest LSN to lowest.
-+ */
-+struct xfs_log_item *
-+xfs_trans_ail_cursor_last(
-+	struct xfs_ail		*ailp,
-+	struct xfs_ail_cursor	*cur,
-+	xfs_lsn_t		lsn)
-+{
-+	xfs_trans_ail_cursor_init(ailp, cur);
-+	cur->item = __xfs_trans_ail_cursor_last(ailp, lsn);
-+	return cur->item;
-+}
-+
-+/*
-+ * splice the log item list into the AIL at the given LSN. We splice to the
-+ * tail of the given LSN to maintain insert order for push traversals. The
-+ * cursor is optional, allowing repeated updates to the same LSN to avoid
-+ * repeated traversals.
-  */
- static void
- xfs_ail_splice(
--	struct xfs_ail  *ailp,
--	struct list_head *list,
--	xfs_lsn_t       lsn)
-+	struct xfs_ail		*ailp,
-+	struct xfs_ail_cursor	*cur,
-+	struct list_head	*list,
-+	xfs_lsn_t		lsn)
- {
--	xfs_log_item_t  *next_lip;
-+	struct xfs_log_item	*lip = cur ? cur->item : NULL;
-+	struct xfs_log_item	*next_lip;
- 
--	/* If the list is empty, just insert the item.  */
--	if (list_empty(&ailp->xa_ail)) {
--		list_splice(list, &ailp->xa_ail);
--		return;
-+	/*
-+	 * Get a new cursor if we don't have a placeholder or the existing one
<<Diff was trimmed, longer than 597 lines>>

---- CVS-web:
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/kernel/kernel-aufs2-unionfs.patch?r1=1.5&r2=1.6&f=u
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/kernel/kernel-small_fixes.patch?r1=1.43&r2=1.44&f=u



More information about the pld-cvs-commit mailing list