Author: baggins Date: Fri Feb 10 20:57:27 2012 GMT Module: packages Tag: HEAD ---- Log message: - removed parts already in kernel
---- Files affected: packages/kernel: kernel-small_fixes.patch (1.51 -> 1.52) ---- Diffs: ================================================================ Index: packages/kernel/kernel-small_fixes.patch diff -u packages/kernel/kernel-small_fixes.patch:1.51 packages/kernel/kernel-small_fixes.patch:1.52 --- packages/kernel/kernel-small_fixes.patch:1.51 Fri Dec 30 11:29:29 2011 +++ packages/kernel/kernel-small_fixes.patch Fri Feb 10 21:57:22 2012 @@ -154,194 +154,3 @@ ->From 4467601416e23740fc940c31b1fffacbcb69b4a0 Mon Sep 17 00:00:00 2001 -From: Corey Minyard <[email protected]> -Date: Mon, 21 Nov 2011 14:26:20 -0600 -Subject: [PATCH] ipmi_watchdog: Restore settings when BMC reset - -If the BMC gets reset, it will return 0x80 response errors. In this case, -it is probably a good idea to restore the IPMI settings. ---- - drivers/char/ipmi/ipmi_watchdog.c | 41 ++++++++++++++++++++++++++++++++++-- - 1 files changed, 38 insertions(+), 3 deletions(-) - -diff --git a/drivers/char/ipmi/ipmi_watchdog.c b/drivers/char/ipmi/ipmi_watchdog.c -index c2917ffa..34767a6 100644 ---- a/drivers/char/ipmi/ipmi_watchdog.c -+++ b/drivers/char/ipmi/ipmi_watchdog.c -@@ -139,6 +139,8 @@ - #define IPMI_WDOG_SET_TIMER 0x24 - #define IPMI_WDOG_GET_TIMER 0x25 - -+#define IPMI_WDOG_TIMER_NOT_INIT_RESP 0x80 -+ - /* These are here until the real ones get into the watchdog.h interface. */ - #ifndef WDIOC_GETTIMEOUT - #define WDIOC_GETTIMEOUT _IOW(WATCHDOG_IOCTL_BASE, 20, int) -@@ -596,6 +598,7 @@ static int ipmi_heartbeat(void) - struct kernel_ipmi_msg msg; - int rv; - struct ipmi_system_interface_addr addr; -+ int timeout_retries = 0; - - if (ipmi_ignore_heartbeat) - return 0; -@@ -616,6 +619,7 @@ static int ipmi_heartbeat(void) - - mutex_lock(&heartbeat_lock); - -+restart: - atomic_set(&heartbeat_tofree, 2); - - /* -@@ -653,7 +657,33 @@ static int ipmi_heartbeat(void) - /* Wait for the heartbeat to be sent. */ - wait_for_completion(&heartbeat_wait); - -- if (heartbeat_recv_msg.msg.data[0] != 0) { -+ if (heartbeat_recv_msg.msg.data[0] == IPMI_WDOG_TIMER_NOT_INIT_RESP) { -+ timeout_retries++; -+ if (timeout_retries > 3) { -+ printk(KERN_ERR PFX ": Unable to restore the IPMI" -+ " watchdog's settings, giving up.\n"); -+ rv = -EIO; -+ goto out_unlock; -+ } -+ -+ /* -+ * The timer was not initialized, that means the BMC was -+ * probably reset and lost the watchdog information. Attempt -+ * to restore the timer's info. Note that we still hold -+ * the heartbeat lock, to keep a heartbeat from happening -+ * in this process, so must say no heartbeat to avoid a -+ * deadlock on this mutex. -+ */ -+ rv = ipmi_set_timeout(IPMI_SET_TIMEOUT_NO_HB); -+ if (rv) { -+ printk(KERN_ERR PFX ": Unable to send the command to" -+ " set the watchdog's settings, giving up.\n"); -+ goto out_unlock; -+ } -+ -+ /* We might need a new heartbeat, so do it now */ -+ goto restart; -+ } else if (heartbeat_recv_msg.msg.data[0] != 0) { - /* - * Got an error in the heartbeat response. It was already - * reported in ipmi_wdog_msg_handler, but we should return -@@ -662,6 +692,7 @@ static int ipmi_heartbeat(void) - rv = -EINVAL; - } - -+out_unlock: - mutex_unlock(&heartbeat_lock); - - return rv; -@@ -922,11 +953,15 @@ static struct miscdevice ipmi_wdog_miscdev = { - static void ipmi_wdog_msg_handler(struct ipmi_recv_msg *msg, - void *handler_data) - { -- if (msg->msg.data[0] != 0) { -+ if (msg->msg.cmd == IPMI_WDOG_RESET_TIMER && -+ msg->msg.data[0] == IPMI_WDOG_TIMER_NOT_INIT_RESP) -+ printk(KERN_INFO PFX "response: The IPMI controller appears" -+ " to have been reset, will attempt to reinitialize" -+ " the watchdog timer\n"); -+ else if (msg->msg.data[0] != 0) - printk(KERN_ERR PFX "response: Error %x on cmd %x\n", - msg->msg.data[0], - msg->msg.cmd); -- } - - ipmi_free_recv_msg(msg); - } --- -1.7.4.1 - -From: Christoph Hellwig <[email protected]> -Date: Tue, 29 Nov 2011 18:06:14 +0000 (-0600) -Subject: xfs: force buffer writeback before blocking on the ilock in inode reclaim -X-Git-Url: http://oss.sgi.com/cgi-bin/gitweb.cgi?p=xfs%2Fxfs.git;a=commitdiff_plain;h=4dd2cb4a28b7ab1f37163a4eba280926a13a8749 - -xfs: force buffer writeback before blocking on the ilock in inode reclaim - -If we are doing synchronous inode reclaim we block the VM from making -progress in memory reclaim. So if we encouter a flush locked inode -promote it in the delwri list and wake up xfsbufd to write it out now. -Without this we can get hangs of up to 30 seconds during workloads hitting -synchronous inode reclaim. - -The scheme is copied from what we do for dquot reclaims. - -Reported-by: Simon Kirby <[email protected]> -Signed-off-by: Christoph Hellwig <[email protected]> -Tested-by: Simon Kirby <[email protected]> -Signed-off-by: Ben Myers <[email protected]> ---- - -diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c -index c0237c6..755ee81 100644 ---- a/fs/xfs/xfs_inode.c -+++ b/fs/xfs/xfs_inode.c -@@ -2835,6 +2835,27 @@ corrupt_out: - return XFS_ERROR(EFSCORRUPTED); - } - -+void -+xfs_promote_inode( -+ struct xfs_inode *ip) -+{ -+ struct xfs_buf *bp; -+ -+ ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)); -+ -+ bp = xfs_incore(ip->i_mount->m_ddev_targp, ip->i_imap.im_blkno, -+ ip->i_imap.im_len, XBF_TRYLOCK); -+ if (!bp) -+ return; -+ -+ if (XFS_BUF_ISDELAYWRITE(bp)) { -+ xfs_buf_delwri_promote(bp); -+ wake_up_process(ip->i_mount->m_ddev_targp->bt_task); -+ } -+ -+ xfs_buf_relse(bp); -+} -+ - /* - * Return a pointer to the extent record at file index idx. - */ -diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h -index 760140d..b4cd473 100644 ---- a/fs/xfs/xfs_inode.h -+++ b/fs/xfs/xfs_inode.h -@@ -498,6 +498,7 @@ int xfs_iunlink(struct xfs_trans *, xfs_inode_t *); - void xfs_iext_realloc(xfs_inode_t *, int, int); - void xfs_iunpin_wait(xfs_inode_t *); - int xfs_iflush(xfs_inode_t *, uint); -+void xfs_promote_inode(struct xfs_inode *); - void xfs_lock_inodes(xfs_inode_t **, int, uint); - void xfs_lock_two_inodes(xfs_inode_t *, xfs_inode_t *, uint); - -diff --git a/fs/xfs/xfs_sync.c b/fs/xfs/xfs_sync.c -index aa3dc1a..be5c51d 100644 ---- a/fs/xfs/xfs_sync.c -+++ b/fs/xfs/xfs_sync.c -@@ -770,6 +770,17 @@ restart: - if (!xfs_iflock_nowait(ip)) { - if (!(sync_mode & SYNC_WAIT)) - goto out; -+ -+ /* -+ * If we only have a single dirty inode in a cluster there is -+ * a fair chance that the AIL push may have pushed it into -+ * the buffer, but xfsbufd won't touch it until 30 seconds -+ * from now, and thus we will lock up here. -+ * -+ * Promote the inode buffer to the front of the delwri list -+ * and wake up xfsbufd now. -+ */ -+ xfs_promote_inode(ip); - xfs_iflock(ip); - } - ================================================================ ---- CVS-web: http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/kernel/kernel-small_fixes.patch?r1=1.51&r2=1.52&f=u _______________________________________________ pld-cvs-commit mailing list [email protected] http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit
