Author: arekm Date: Tue Dec 13 06:23:59 2011 GMT Module: packages Tag: LINUX_3_0 ---- Log message: - xfs fixes (will be in 3.0.14 probably)
---- Files affected: packages/kernel: kernel-small_fixes.patch (1.43.2.11 -> 1.43.2.12) ---- Diffs: ================================================================ Index: packages/kernel/kernel-small_fixes.patch diff -u packages/kernel/kernel-small_fixes.patch:1.43.2.11 packages/kernel/kernel-small_fixes.patch:1.43.2.12 --- packages/kernel/kernel-small_fixes.patch:1.43.2.11 Fri Dec 9 21:20:44 2011 +++ packages/kernel/kernel-small_fixes.patch Tue Dec 13 07:23:54 2011 @@ -963,3 +963,150 @@ 1.7.4.1 +Subject: [PATCH 1/2] xfs: fix nfs export of 64-bit inodes numbers on 32-bit + kernels + +commit c29f7d457ac63311feb11928a866efd2fe153d74 upstream. + +The i_ino field in the VFS inode is of type unsigned long and thus can't +hold the full 64-bit inode number on 32-bit kernels. We have the full +inode number in the XFS inode, so use that one for nfs exports. Note +that I've also switched the 32-bit file handles types to it, just to make +the code more consistent and copy & paste errors less likely to happen. + +Reported-by: Guoquan Yang <[email protected]> +Reported-by: Hank Peng <[email protected]> +Signed-off-by: Christoph Hellwig <[email protected]> +Signed-off-by: Ben Myers <[email protected]> + +diff --git a/fs/xfs/linux-2.6/xfs_export.c b/fs/xfs/linux-2.6/xfs_export.c +index f4f878f..fed3f3c 100644 +--- a/fs/xfs/linux-2.6/xfs_export.c ++++ b/fs/xfs/linux-2.6/xfs_export.c +@@ -98,22 +98,22 @@ xfs_fs_encode_fh( + switch (fileid_type) { + case FILEID_INO32_GEN_PARENT: + spin_lock(&dentry->d_lock); +- fid->i32.parent_ino = dentry->d_parent->d_inode->i_ino; ++ fid->i32.parent_ino = XFS_I(dentry->d_parent->d_inode)->i_ino; + fid->i32.parent_gen = dentry->d_parent->d_inode->i_generation; + spin_unlock(&dentry->d_lock); + /*FALLTHRU*/ + case FILEID_INO32_GEN: +- fid->i32.ino = inode->i_ino; ++ fid->i32.ino = XFS_I(inode)->i_ino; + fid->i32.gen = inode->i_generation; + break; + case FILEID_INO32_GEN_PARENT | XFS_FILEID_TYPE_64FLAG: + spin_lock(&dentry->d_lock); +- fid64->parent_ino = dentry->d_parent->d_inode->i_ino; ++ fid64->parent_ino = XFS_I(dentry->d_parent->d_inode)->i_ino; + fid64->parent_gen = dentry->d_parent->d_inode->i_generation; + spin_unlock(&dentry->d_lock); + /*FALLTHRU*/ + case FILEID_INO32_GEN | XFS_FILEID_TYPE_64FLAG: +- fid64->ino = inode->i_ino; ++ fid64->ino = XFS_I(inode)->i_ino; + fid64->gen = inode->i_generation; + break; + } + +_______________________________________________ +xfs mailing list [email protected] +http://oss.sgi.com/mailman/listinfo/xfs +Subject: [PATCH 2/2] xfs: avoid synchronous transactions when deleting attr + blocks + +commit 859f57ca00805e6c482eef1a7ab073097d02c8ca upstream. + +[slightly different from the upstream version because of a previous cleanup] + +Currently xfs_attr_inactive causes a synchronous transactions if we are +removing a file that has any extents allocated to the attribute fork, and +thus makes XFS extremely slow at removing files with out of line extended +attributes. The code looks a like a relict from the days before the busy +extent list, but with the busy extent list we avoid reusing data and attr +extents that have been freed but not commited yet, so this code is just +as superflous as the synchronous transactions for data blocks. + +Signed-off-by: Christoph Hellwig <[email protected]> +Reported-by: Bernd Schubert <[email protected]> +Reviewed-by: Dave Chinner <[email protected]> +Signed-off-by: Alex Elder <[email protected]> + +diff --git a/fs/xfs/xfs_attr.c b/fs/xfs/xfs_attr.c +index 01d2072..99d4011 100644 +--- a/fs/xfs/xfs_attr.c ++++ b/fs/xfs/xfs_attr.c +@@ -822,17 +822,9 @@ xfs_attr_inactive(xfs_inode_t *dp) + error = xfs_attr_root_inactive(&trans, dp); + if (error) + goto out; +- /* +- * signal synchronous inactive transactions unless this +- * is a synchronous mount filesystem in which case we +- * know that we're here because we've been called out of +- * xfs_inactive which means that the last reference is gone +- * and the unlink transaction has already hit the disk so +- * async inactive transactions are safe. +- */ +- if ((error = xfs_itruncate_finish(&trans, dp, 0LL, XFS_ATTR_FORK, +- (!(mp->m_flags & XFS_MOUNT_WSYNC) +- ? 1 : 0)))) ++ ++ error = xfs_itruncate_finish(&trans, dp, 0LL, XFS_ATTR_FORK, 0); ++ if (error) + goto out; + + /* +diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c +index e546a33..a175933 100644 +--- a/fs/xfs/xfs_bmap.c ++++ b/fs/xfs/xfs_bmap.c +@@ -3785,19 +3785,11 @@ xfs_bmap_compute_maxlevels( + * Routine to be called at transaction's end by xfs_bmapi, xfs_bunmapi + * caller. Frees all the extents that need freeing, which must be done + * last due to locking considerations. We never free any extents in +- * the first transaction. This is to allow the caller to make the first +- * transaction a synchronous one so that the pointers to the data being +- * broken in this transaction will be permanent before the data is actually +- * freed. This is necessary to prevent blocks from being reallocated +- * and written to before the free and reallocation are actually permanent. +- * We do not just make the first transaction synchronous here, because +- * there are more efficient ways to gain the same protection in some cases +- * (see the file truncation code). ++ * the first transaction. + * + * Return 1 if the given transaction was committed and a new one + * started, and 0 otherwise in the committed parameter. + */ +-/*ARGSUSED*/ + int /* error */ + xfs_bmap_finish( + xfs_trans_t **tp, /* transaction pointer addr */ +diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c +index c6888a4..5715279 100644 +--- a/fs/xfs/xfs_inode.c ++++ b/fs/xfs/xfs_inode.c +@@ -1528,15 +1528,7 @@ xfs_itruncate_finish( + xfs_trans_log_inode(ntp, ip, XFS_ILOG_CORE); + } + } +- } else if (sync) { +- ASSERT(!(mp->m_flags & XFS_MOUNT_WSYNC)); +- if (ip->i_d.di_anextents > 0) +- xfs_trans_set_sync(ntp); + } +- ASSERT(fork == XFS_DATA_FORK || +- (fork == XFS_ATTR_FORK && +- ((sync && !(mp->m_flags & XFS_MOUNT_WSYNC)) || +- (sync == 0 && (mp->m_flags & XFS_MOUNT_WSYNC))))); + + /* + * Since it is possible for space to become allocated beyond + +_______________________________________________ +xfs mailing list [email protected] +http://oss.sgi.com/mailman/listinfo/xfs ================================================================ ---- CVS-web: http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/kernel/kernel-small_fixes.patch?r1=1.43.2.11&r2=1.43.2.12&f=u _______________________________________________ pld-cvs-commit mailing list [email protected] http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit
