Author: arekm Date: Sun Nov 27 14:14:05 2011 GMT Module: packages Tag: LINUX_3_0 ---- Log message: - up to 3.0.11
---- Files affected: packages/kernel: kernel-small_fixes.patch (1.43.2.8 -> 1.43.2.9) , kernel.spec (1.987.2.10 -> 1.987.2.11) ---- Diffs: ================================================================ Index: packages/kernel/kernel-small_fixes.patch diff -u packages/kernel/kernel-small_fixes.patch:1.43.2.8 packages/kernel/kernel-small_fixes.patch:1.43.2.9 --- packages/kernel/kernel-small_fixes.patch:1.43.2.8 Mon Nov 21 22:19:26 2011 +++ packages/kernel/kernel-small_fixes.patch Sun Nov 27 15:14:00 2011 @@ -935,398 +935,6 @@ } /* -Subject: [PATCH 1/9] [PATCH 1/9] "xfs: fix error handling for synchronous - writes" - -xfs: fix for hang during synchronous buffer write error - -If removed storage while synchronous buffer write underway, -"xfslogd" hangs. - -Detailed log http://oss.sgi.com/archives/xfs/2011-07/msg00740.html - -Related work bfc60177f8ab509bc225becbb58f7e53a0e33e81 -"xfs: fix error handling for synchronous writes" - -Given that xfs_bwrite actually does the shutdown already after -waiting for the b_iodone completion and given that we actually -found that calling xfs_force_shutdown from inside -xfs_buf_iodone_callbacks was a major contributor the problem -it better to drop this call. - -Signed-off-by: Ajeet Yadav <[email protected]> -Reviewed-by: Christoph Hellwig <[email protected]> -Signed-off-by: Alex Elder <[email protected]> ---- - fs/xfs/xfs_buf_item.c | 1 - - 1 files changed, 0 insertions(+), 1 deletions(-) - -diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c -index a7342e8..7888a75 100644 ---- a/fs/xfs/xfs_buf_item.c -+++ b/fs/xfs/xfs_buf_item.c -@@ -1023,7 +1023,6 @@ xfs_buf_iodone_callbacks( - XFS_BUF_UNDELAYWRITE(bp); - - trace_xfs_buf_error_relse(bp, _RET_IP_); -- xfs_force_shutdown(mp, SHUTDOWN_META_IO_ERROR); - - do_callbacks: - xfs_buf_do_callbacks(bp); --- -1.7.7 - - -_______________________________________________ -xfs mailing list [email protected] -http://oss.sgi.com/mailman/listinfo/xfs -Subject: [PATCH 2/9] [PATCH 2/9] xfs: fix xfs_mark_inode_dirty during umount - -During umount we do not add a dirty inode to the lru and wait for it to -become clean first, but force writeback of data and metadata with -I_WILL_FREE set. Currently there is no way for XFS to detect that the -inode has been redirtied for metadata operations, as we skip the -mark_inode_dirty call during teardown. Fix this by setting i_update_core -nanually in that case, so that the inode gets flushed during inode reclaim. - -Alternatively we could enable calling mark_inode_dirty for inodes in -I_WILL_FREE state, and let the VFS dirty tracking handle this. I decided -against this as we will get better I/O patterns from reclaim compared to -the synchronous writeout in write_inode_now, and always marking the inode -dirty in some way from xfs_mark_inode_dirty is a better safetly net in -either case. - -Signed-off-by: Christoph Hellwig <[email protected]> -Reviewed-by: Dave Chinner <[email protected]> -Signed-off-by: Alex Elder <[email protected]> -(cherry picked from commit da6742a5a4cc844a9982fdd936ddb537c0747856) - -Signed-off-by: Alex Elder <[email protected]> ---- - fs/xfs/linux-2.6/xfs_iops.c | 14 +++++++++++--- - 1 files changed, 11 insertions(+), 3 deletions(-) - -diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c -index d44d92c..a9b3e1e 100644 ---- a/fs/xfs/linux-2.6/xfs_iops.c -+++ b/fs/xfs/linux-2.6/xfs_iops.c -@@ -69,9 +69,8 @@ xfs_synchronize_times( - } - - /* -- * If the linux inode is valid, mark it dirty. -- * Used when committing a dirty inode into a transaction so that -- * the inode will get written back by the linux code -+ * If the linux inode is valid, mark it dirty, else mark the dirty state -+ * in the XFS inode to make sure we pick it up when reclaiming the inode. - */ - void - xfs_mark_inode_dirty_sync( -@@ -81,6 +80,10 @@ xfs_mark_inode_dirty_sync( - - if (!(inode->i_state & (I_WILL_FREE|I_FREEING))) - mark_inode_dirty_sync(inode); -+ else { -+ barrier(); -+ ip->i_update_core = 1; -+ } - } - - void -@@ -91,6 +94,11 @@ xfs_mark_inode_dirty( - - if (!(inode->i_state & (I_WILL_FREE|I_FREEING))) - mark_inode_dirty(inode); -+ else { -+ barrier(); -+ ip->i_update_core = 1; -+ } -+ - } - - /* --- -1.7.7 - - -_______________________________________________ -xfs mailing list [email protected] -http://oss.sgi.com/mailman/listinfo/xfs -Subject: [PATCH 3/9] [PATCH 3/9] xfs: fix ->write_inode return values - -Currently we always redirty an inode that was attempted to be written out -synchronously but has been cleaned by an AIL pushed internall, which is -rather bogus. Fix that by doing the i_update_core check early on and -return 0 for it. Also include async calls for it, as doing any work for -those is just as pointless. While we're at it also fix the sign for the -EIO return in case of a filesystem shutdown, and fix the completely -non-sensical locking around xfs_log_inode. - -Signed-off-by: Christoph Hellwig <[email protected]> -Reviewed-by: Dave Chinner <[email protected]> -Signed-off-by: Alex Elder <[email protected]> -(cherry picked from commit 297db93bb74cf687510313eb235a7aec14d67e97) - -Signed-off-by: Alex Elder <[email protected]> ---- - fs/xfs/linux-2.6/xfs_super.c | 34 +++++++++------------------------- - 1 files changed, 9 insertions(+), 25 deletions(-) - -diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c -index 347cae9..28de70b 100644 ---- a/fs/xfs/linux-2.6/xfs_super.c -+++ b/fs/xfs/linux-2.6/xfs_super.c -@@ -878,33 +878,17 @@ xfs_log_inode( - struct xfs_trans *tp; - int error; - -- xfs_iunlock(ip, XFS_ILOCK_SHARED); - tp = xfs_trans_alloc(mp, XFS_TRANS_FSYNC_TS); - error = xfs_trans_reserve(tp, 0, XFS_FSYNC_TS_LOG_RES(mp), 0, 0, 0); -- - if (error) { - xfs_trans_cancel(tp, 0); -- /* we need to return with the lock hold shared */ -- xfs_ilock(ip, XFS_ILOCK_SHARED); - return error; - } - - xfs_ilock(ip, XFS_ILOCK_EXCL); -- -- /* -- * Note - it's possible that we might have pushed ourselves out of the -- * way during trans_reserve which would flush the inode. But there's -- * no guarantee that the inode buffer has actually gone out yet (it's -- * delwri). Plus the buffer could be pinned anyway if it's part of -- * an inode in another recent transaction. So we play it safe and -- * fire off the transaction anyway. -- */ -- xfs_trans_ijoin(tp, ip); -+ xfs_trans_ijoin_ref(tp, ip, XFS_ILOCK_EXCL); - xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); -- error = xfs_trans_commit(tp, 0); -- xfs_ilock_demote(ip, XFS_ILOCK_EXCL); -- -- return error; -+ return xfs_trans_commit(tp, 0); - } - - STATIC int -@@ -919,7 +903,9 @@ xfs_fs_write_inode( - trace_xfs_write_inode(ip); - - if (XFS_FORCED_SHUTDOWN(mp)) -- return XFS_ERROR(EIO); -+ return -XFS_ERROR(EIO); -+ if (!ip->i_update_core) -+ return 0; - - if (wbc->sync_mode == WB_SYNC_ALL) { - /* -@@ -930,12 +916,10 @@ xfs_fs_write_inode( - * of synchronous log foces dramatically. - */ - xfs_ioend_wait(ip); -- xfs_ilock(ip, XFS_ILOCK_SHARED); -- if (ip->i_update_core) { -- error = xfs_log_inode(ip); -- if (error) -- goto out_unlock; -- } -+ error = xfs_log_inode(ip); -+ if (error) -+ goto out; -+ return 0; - } else { - /* - * We make this non-blocking if the inode is contended, return --- -1.7.7 - - -_______________________________________________ -xfs mailing list [email protected] -http://oss.sgi.com/mailman/listinfo/xfs -Subject: [PATCH 4/9] [PATCH 4/9] xfs: dont serialise direct IO reads on page - cache - -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 <[email protected]> -Tested-by: Joern Engel <[email protected]> -Reviewed-by: Christoph Hellwig <[email protected]> -Signed-off-by: Alex Elder <[email protected]> ---- - fs/xfs/linux-2.6/xfs_file.c | 17 ++++++++++++++--- - 1 files changed, 14 insertions(+), 3 deletions(-) - -diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c -index 7f782af2..93cc02d 100644 ---- a/fs/xfs/linux-2.6/xfs_file.c -+++ b/fs/xfs/linux-2.6/xfs_file.c -@@ -309,7 +309,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) { -@@ -322,8 +334,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); - --- -1.7.7 - - -_______________________________________________ -xfs mailing list [email protected] -http://oss.sgi.com/mailman/listinfo/xfs -Subject: [PATCH 5/9] [PATCH 5/9] xfs: avoid direct I/O write vs buffered I/O - race - -Currently a buffered reader or writer can add pages to the pagecache -while we are waiting for the iolock in xfs_file_dio_aio_write. Prevent -this by re-checking mapping->nrpages after we got the iolock, and if -nessecary upgrade the lock to exclusive mode. To simplify this a bit -only take the ilock inside of xfs_file_aio_write_checks. - -Signed-off-by: Christoph Hellwig <[email protected]> -Reviewed-by: Dave Chinner <[email protected]> -Signed-off-by: Alex Elder <[email protected]> ---- - fs/xfs/linux-2.6/xfs_file.c | 17 ++++++++++++++--- - 1 files changed, 14 insertions(+), 3 deletions(-) - -diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c -index 93cc02d..b679198 100644 ---- a/fs/xfs/linux-2.6/xfs_file.c -+++ b/fs/xfs/linux-2.6/xfs_file.c -@@ -669,6 +669,7 @@ xfs_file_aio_write_checks( - xfs_fsize_t new_size; - int error = 0; - -+ xfs_rw_ilock(ip, XFS_ILOCK_EXCL); - error = generic_write_checks(file, pos, count, S_ISBLK(inode->i_mode)); - if (error) { - xfs_rw_iunlock(ip, XFS_ILOCK_EXCL | *iolock); -@@ -760,14 +761,24 @@ xfs_file_dio_aio_write( - *iolock = XFS_IOLOCK_EXCL; - else - *iolock = XFS_IOLOCK_SHARED; -- xfs_rw_ilock(ip, XFS_ILOCK_EXCL | *iolock); -+ xfs_rw_ilock(ip, *iolock); - - ret = xfs_file_aio_write_checks(file, &pos, &count, iolock); - if (ret) - return ret; - -+ /* -+ * Recheck if there are cached pages that need invalidate after we got -+ * the iolock to protect against other threads adding new pages while -+ * we were waiting for the iolock. -+ */ -+ if (mapping->nrpages && *iolock == XFS_IOLOCK_SHARED) { -+ xfs_rw_iunlock(ip, *iolock); -+ *iolock = XFS_IOLOCK_EXCL; -+ xfs_rw_ilock(ip, *iolock); -+ } -+ - if (mapping->nrpages) { -- WARN_ON(*iolock != XFS_IOLOCK_EXCL); - ret = -xfs_flushinval_pages(ip, (pos & PAGE_CACHE_MASK), -1, - FI_REMAPF_LOCKED); - if (ret) -@@ -812,7 +823,7 @@ xfs_file_buffered_aio_write( - size_t count = ocount; - - *iolock = XFS_IOLOCK_EXCL; -- xfs_rw_ilock(ip, XFS_ILOCK_EXCL | *iolock); -+ xfs_rw_ilock(ip, *iolock); - - ret = xfs_file_aio_write_checks(file, &pos, &count, iolock); - if (ret) --- -1.7.7 - - -_______________________________________________ -xfs mailing list [email protected] -http://oss.sgi.com/mailman/listinfo/xfs -Subject: [PATCH 6/9] [PATCH 6/9] xfs: Return -EIO when xfs_vn_getattr() failed - -An attribute of inode can be fetched via xfs_vn_getattr() in XFS. -Currently it returns EIO, not negative value, when it failed. As a -result, the system call returns not negative value even though an -error occured. The stat(2), ls and mv commands cannot handle this -error and do not work correctly. - -This patch fixes this bug, and returns -EIO, not EIO when an error -is detected in xfs_vn_getattr(). - -Signed-off-by: Mitsuo Hayasaka <[email protected]> -Reviewed-by: Christoph Hellwig <[email protected]> -Signed-off-by: Alex Elder <[email protected]> ---- - fs/xfs/linux-2.6/xfs_iops.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c -index a9b3e1e..f5b697b 100644 ---- a/fs/xfs/linux-2.6/xfs_iops.c -+++ b/fs/xfs/linux-2.6/xfs_iops.c -@@ -464,7 +464,7 @@ xfs_vn_getattr( - trace_xfs_getattr(ip); - - if (XFS_FORCED_SHUTDOWN(mp)) -- return XFS_ERROR(EIO); -+ return -XFS_ERROR(EIO); - - stat->size = XFS_ISIZE(ip); - stat->dev = inode->i_sb->s_dev; --- -1.7.7 - - -_______________________________________________ -xfs mailing list [email protected] -http://oss.sgi.com/mailman/listinfo/xfs commit 745718132c3c7cac98a622b610e239dcd5217f71 Author: Hannes Reinecke <[email protected]> Date: Wed Nov 9 08:39:24 2011 +0100 ================================================================ Index: packages/kernel/kernel.spec diff -u packages/kernel/kernel.spec:1.987.2.10 packages/kernel/kernel.spec:1.987.2.11 --- packages/kernel/kernel.spec:1.987.2.10 Sun Nov 27 13:46:28 2011 +++ packages/kernel/kernel.spec Sun Nov 27 15:14:00 2011 @@ -94,8 +94,8 @@ %endif %define basever 3.0 -%define postver .10 -%define rel 1.1 +%define postver .11 +%define rel 1 %define _enable_debug_packages 0 @@ -143,7 +143,7 @@ # Source0-md5: ecf932280e2441bdd992423ef3d55f8f %if "%{postver}" != ".0" Patch0: http://www.kernel.org/pub/linux/kernel/v3.x/patch-%{version}.bz2 -# Patch0-md5: 8e0391dd935d838ee3023ab9daa6b447 +# Patch0-md5: e16607a50ca38430bec6bcf240983fd1 %endif Source3: kernel-autoconf.h @@ -1534,6 +1534,9 @@ All persons listed below can be reached at <cvs_login>@pld-linux.org $Log$ +Revision 1.987.2.11 2011/11/27 14:14:00 arekm +- up to 3.0.11 + Revision 1.987.2.10 2011/11/27 12:46:28 arekm - rel 1.1 ================================================================ ---- CVS-web: http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/kernel/kernel-small_fixes.patch?r1=1.43.2.8&r2=1.43.2.9&f=u http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/kernel/kernel.spec?r1=1.987.2.10&r2=1.987.2.11&f=u _______________________________________________ pld-cvs-commit mailing list [email protected] http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit
