summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Peterson <lavajoe@gentoo.org>2008-11-27 18:41:54 +0000
committerJoe Peterson <lavajoe@gentoo.org>2008-11-27 18:41:54 +0000
commitbc82709fb27bc9bb403994d9a34da528c6a1680f (patch)
tree526c9cd3a538f08b9ee06d0f24dc6edc7d7a23ee /sys-fs/btrfs
parentMove dev-util/pkgconfig from RDEPEND to DEPEND wrt #224301. (diff)
downloadgentoo-2-bc82709fb27bc9bb403994d9a34da528c6a1680f.tar.gz
gentoo-2-bc82709fb27bc9bb403994d9a34da528c6a1680f.tar.bz2
gentoo-2-bc82709fb27bc9bb403994d9a34da528c6a1680f.zip
Move large patch file to mirrors (bug #249019); remove old versions
(Portage version: 2.1.6_rc2/cvs/Linux 2.6.27-gentoo-r2 i686)
Diffstat (limited to 'sys-fs/btrfs')
-rw-r--r--sys-fs/btrfs/ChangeLog9
-rw-r--r--sys-fs/btrfs/btrfs-0.15-r2.ebuild65
-rw-r--r--sys-fs/btrfs/btrfs-0.16-r1.ebuild67
-rw-r--r--sys-fs/btrfs/btrfs-0.16-r2.ebuild7
-rw-r--r--sys-fs/btrfs/btrfs-0.16.ebuild66
-rw-r--r--sys-fs/btrfs/files/btrfs-0.15-acl-disable.patch31
-rw-r--r--sys-fs/btrfs/files/btrfs-0.15-r2-hotfix.patch111
-rw-r--r--sys-fs/btrfs/files/btrfs-0.16-hotfix-1.patch992
-rw-r--r--sys-fs/btrfs/files/btrfs-0.16-new-kernels.patch45
9 files changed, 12 insertions, 1381 deletions
diff --git a/sys-fs/btrfs/ChangeLog b/sys-fs/btrfs/ChangeLog
index bb563dc7b932..713fe33dfaa3 100644
--- a/sys-fs/btrfs/ChangeLog
+++ b/sys-fs/btrfs/ChangeLog
@@ -1,6 +1,13 @@
# ChangeLog for sys-fs/btrfs
# Copyright 1999-2008 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/sys-fs/btrfs/ChangeLog,v 1.15 2008/11/17 22:53:14 flameeyes Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-fs/btrfs/ChangeLog,v 1.16 2008/11/27 18:41:54 lavajoe Exp $
+
+ 27 Nov 2008; Joe Peterson <lavajoe@gentoo.org>
+ -files/btrfs-0.15-acl-disable.patch, -files/btrfs-0.15-r2-hotfix.patch,
+ -files/btrfs-0.16-hotfix-1.patch, -files/btrfs-0.16-new-kernels.patch,
+ -btrfs-0.15-r2.ebuild, -btrfs-0.16.ebuild, -btrfs-0.16-r1.ebuild,
+ btrfs-0.16-r2.ebuild:
+ Move large patch file to mirrors (bug #249019); remove old versions
17 Nov 2008; Diego E. Pettenò <flameeyes@gentoo.org>
files/btrfs-0.16-new-kernels.patch:
diff --git a/sys-fs/btrfs/btrfs-0.15-r2.ebuild b/sys-fs/btrfs/btrfs-0.15-r2.ebuild
deleted file mode 100644
index f90e6638a2a4..000000000000
--- a/sys-fs/btrfs/btrfs-0.15-r2.ebuild
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copyright 1999-2008 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-fs/btrfs/btrfs-0.15-r2.ebuild,v 1.4 2008/07/29 03:42:26 lavajoe Exp $
-
-inherit eutils linux-mod
-
-DESCRIPTION="A checksumming copy-on-write filesystem"
-HOMEPAGE="http://btrfs.wiki.kernel.org/"
-SRC_URI="http://www.kernel.org/pub/linux/kernel/people/mason/btrfs/${P}.tar.bz2"
-
-LICENSE="GPL-2"
-SLOT="0"
-KEYWORDS="~amd64 ~x86"
-IUSE=""
-
-DEPEND=""
-RDEPEND="${DEPEND}"
-
-pkg_setup()
-{
- linux-mod_pkg_setup
-
- BUILD_TARGETS="all"
- BUILD_PARAMS="KERNELDIR=${KV_OUT_DIR}"
- MODULE_NAMES="btrfs(fs:${S}/"
-
- if ! kernel_is 2 6; then
- eerror "Need a 2.6 kernel to compile against!"
- die "Need a 2.6 kernel to compile against!"
- fi
-
- if ! linux_chkconfig_present LIBCRC32C; then
- eerror "You need to enable LIBCRC32C in your kernel!"
- die "You need to enable LIBCRC32C in your kernel!"
- fi
-}
-
-src_unpack() {
- unpack ${A}
- cd "${S}"
-
- epatch "${FILESDIR}/${PF}-hotfix.patch"
- epatch "${FILESDIR}/${P}-acl-disable.patch"
-}
-
-src_install()
-{
- linux-mod_src_install
-
- dodoc INSTALL TODO
-}
-
-pkg_postinst() {
- linux-mod_pkg_postinst
-
- ewarn "WARNING: Btrfs is under heavy development and is not suitable for"
- ewarn " any uses other than benchmarking and review."
- ewarn " The Btrfs disk format is not yet finalized."
- ewarn
- ewarn " Also, it is highly recommended that the versions of"
- ewarn " btrfs and btrfs-progs match."
- ewarn
- ewarn "Note: If upgrading from 0.14, there is no disk format change,"
- ewarn " but it might be prudent to fsck after upgrading."
-}
diff --git a/sys-fs/btrfs/btrfs-0.16-r1.ebuild b/sys-fs/btrfs/btrfs-0.16-r1.ebuild
deleted file mode 100644
index bd9773ca51dc..000000000000
--- a/sys-fs/btrfs/btrfs-0.16-r1.ebuild
+++ /dev/null
@@ -1,67 +0,0 @@
-# Copyright 1999-2008 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-fs/btrfs/btrfs-0.16-r1.ebuild,v 1.1 2008/08/18 17:10:33 lavajoe Exp $
-
-inherit eutils linux-mod
-
-DESCRIPTION="A checksumming copy-on-write filesystem"
-HOMEPAGE="http://btrfs.wiki.kernel.org/"
-SRC_URI="http://www.kernel.org/pub/linux/kernel/people/mason/btrfs/${P}.tar.bz2"
-
-LICENSE="GPL-2"
-SLOT="0"
-KEYWORDS="~amd64 ~x86"
-IUSE=""
-
-DEPEND=""
-RDEPEND="${DEPEND}"
-
-pkg_setup()
-{
- linux-mod_pkg_setup
-
- BUILD_TARGETS="all"
- BUILD_PARAMS="KERNELDIR=${KV_OUT_DIR}"
- MODULE_NAMES="btrfs(fs:${S}/"
-
- if ! kernel_is 2 6; then
- eerror "Need a 2.6 kernel to compile against!"
- die "Need a 2.6 kernel to compile against!"
- fi
-
- if ! linux_chkconfig_present LIBCRC32C; then
- eerror "You need to enable LIBCRC32C in your kernel!"
- die "You need to enable LIBCRC32C in your kernel!"
- fi
-}
-
-src_unpack() {
- unpack ${A}
- cd "${S}"
-
- # Apply hot fixes
- #epatch "${FILESDIR}/${P}-hotfix.patch"
- epatch "${FILESDIR}/${P}-new-kernels.patch"
-}
-
-src_install()
-{
- linux-mod_src_install
-
- dodoc INSTALL TODO
-}
-
-pkg_postinst() {
- linux-mod_pkg_postinst
-
- ewarn "WARNING: Btrfs is under heavy development and is not suitable for"
- ewarn " any uses other than benchmarking and review."
- ewarn " The Btrfs disk format is not yet finalized."
- ewarn
- ewarn " Also, it is highly recommended that the versions of"
- ewarn " btrfs and btrfs-progs match."
- ewarn
- ewarn "Note: THE DISK FORMAT HAS CHANGED!"
- ewarn " You must backup your data and re-create your btrfs"
- ewarn " filesystem(s) for use with this version."
-}
diff --git a/sys-fs/btrfs/btrfs-0.16-r2.ebuild b/sys-fs/btrfs/btrfs-0.16-r2.ebuild
index dbae32b51317..80414bd15242 100644
--- a/sys-fs/btrfs/btrfs-0.16-r2.ebuild
+++ b/sys-fs/btrfs/btrfs-0.16-r2.ebuild
@@ -1,12 +1,13 @@
# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-fs/btrfs/btrfs-0.16-r2.ebuild,v 1.1 2008/08/20 23:59:42 lavajoe Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-fs/btrfs/btrfs-0.16-r2.ebuild,v 1.2 2008/11/27 18:41:54 lavajoe Exp $
inherit eutils linux-mod
DESCRIPTION="A checksumming copy-on-write filesystem"
HOMEPAGE="http://btrfs.wiki.kernel.org/"
-SRC_URI="http://www.kernel.org/pub/linux/kernel/people/mason/btrfs/${P}.tar.bz2"
+SRC_URI="http://www.kernel.org/pub/linux/kernel/people/mason/btrfs/${P}.tar.bz2
+ mirror://gentoo/${P}-hotfix.patch.bz2"
LICENSE="GPL-2"
SLOT="0"
@@ -40,7 +41,7 @@ src_unpack() {
cd "${S}"
# Apply hot fixes
- epatch "${FILESDIR}/${P}-hotfix-1.patch"
+ epatch "${WORKDIR}/${P}-hotfix.patch"
}
src_install()
diff --git a/sys-fs/btrfs/btrfs-0.16.ebuild b/sys-fs/btrfs/btrfs-0.16.ebuild
deleted file mode 100644
index 15b73c1992cd..000000000000
--- a/sys-fs/btrfs/btrfs-0.16.ebuild
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright 1999-2008 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-fs/btrfs/btrfs-0.16.ebuild,v 1.1 2008/08/06 04:04:52 lavajoe Exp $
-
-inherit eutils linux-mod
-
-DESCRIPTION="A checksumming copy-on-write filesystem"
-HOMEPAGE="http://btrfs.wiki.kernel.org/"
-SRC_URI="http://www.kernel.org/pub/linux/kernel/people/mason/btrfs/${P}.tar.bz2"
-
-LICENSE="GPL-2"
-SLOT="0"
-KEYWORDS="~amd64 ~x86"
-IUSE=""
-
-DEPEND=""
-RDEPEND="${DEPEND}"
-
-pkg_setup()
-{
- linux-mod_pkg_setup
-
- BUILD_TARGETS="all"
- BUILD_PARAMS="KERNELDIR=${KV_OUT_DIR}"
- MODULE_NAMES="btrfs(fs:${S}/"
-
- if ! kernel_is 2 6; then
- eerror "Need a 2.6 kernel to compile against!"
- die "Need a 2.6 kernel to compile against!"
- fi
-
- if ! linux_chkconfig_present LIBCRC32C; then
- eerror "You need to enable LIBCRC32C in your kernel!"
- die "You need to enable LIBCRC32C in your kernel!"
- fi
-}
-
-src_unpack() {
- unpack ${A}
- cd "${S}"
-
- # Apply hot fixes
- #epatch "${FILESDIR}/${P}-hotfix.patch"
-}
-
-src_install()
-{
- linux-mod_src_install
-
- dodoc INSTALL TODO
-}
-
-pkg_postinst() {
- linux-mod_pkg_postinst
-
- ewarn "WARNING: Btrfs is under heavy development and is not suitable for"
- ewarn " any uses other than benchmarking and review."
- ewarn " The Btrfs disk format is not yet finalized."
- ewarn
- ewarn " Also, it is highly recommended that the versions of"
- ewarn " btrfs and btrfs-progs match."
- ewarn
- ewarn "Note: THE DISK FORMAT HAS CHANGED!"
- ewarn " You must backup your data and re-create your btrfs"
- ewarn " filesystem(s) for use with this version."
-}
diff --git a/sys-fs/btrfs/files/btrfs-0.15-acl-disable.patch b/sys-fs/btrfs/files/btrfs-0.15-acl-disable.patch
deleted file mode 100644
index e6dae4b314c6..000000000000
--- a/sys-fs/btrfs/files/btrfs-0.15-acl-disable.patch
+++ /dev/null
@@ -1,31 +0,0 @@
---- btrfs-0.15/xattr.c.orig 2008-06-03 11:11:03.000000000 -0600
-+++ btrfs-0.15/xattr.c 2008-06-03 11:11:23.000000000 -0600
-@@ -29,22 +29,22 @@
- static struct xattr_handler *btrfs_xattr_handler_map[] = {
- [BTRFS_XATTR_INDEX_USER] = &btrfs_xattr_user_handler,
- #ifdef CONFIG_FS_POSIX_ACL
-- [BTRFS_XATTR_INDEX_POSIX_ACL_ACCESS] = &btrfs_xattr_acl_access_handler,
-- [BTRFS_XATTR_INDEX_POSIX_ACL_DEFAULT] = &btrfs_xattr_acl_default_handler,
-+// [BTRFS_XATTR_INDEX_POSIX_ACL_ACCESS] = &btrfs_xattr_acl_access_handler,
-+// [BTRFS_XATTR_INDEX_POSIX_ACL_DEFAULT] = &btrfs_xattr_acl_default_handler,
- #endif
- [BTRFS_XATTR_INDEX_TRUSTED] = &btrfs_xattr_trusted_handler,
- [BTRFS_XATTR_INDEX_SECURITY] = &btrfs_xattr_security_handler,
-- [BTRFS_XATTR_INDEX_SYSTEM] = &btrfs_xattr_system_handler,
-+// [BTRFS_XATTR_INDEX_SYSTEM] = &btrfs_xattr_system_handler,
- };
- struct xattr_handler *btrfs_xattr_handlers[] = {
- &btrfs_xattr_user_handler,
- #ifdef CONFIG_FS_POSIX_ACL
-- &btrfs_xattr_acl_access_handler,
-- &btrfs_xattr_acl_default_handler,
-+// &btrfs_xattr_acl_access_handler,
-+// &btrfs_xattr_acl_default_handler,
- #endif
- &btrfs_xattr_trusted_handler,
- &btrfs_xattr_security_handler,
-- &btrfs_xattr_system_handler,
-+// &btrfs_xattr_system_handler,
- NULL,
- };
-
diff --git a/sys-fs/btrfs/files/btrfs-0.15-r2-hotfix.patch b/sys-fs/btrfs/files/btrfs-0.15-r2-hotfix.patch
deleted file mode 100644
index 4e22e185145d..000000000000
--- a/sys-fs/btrfs/files/btrfs-0.15-r2-hotfix.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-Files btrfs-0.15/.hg/00changelog.i and kernel/.hg/00changelog.i differ
-diff -Nur btrfs-0.15/.hg/branch kernel/.hg/branch
---- btrfs-0.15/.hg/branch 1969-12-31 17:00:00.000000000 -0700
-+++ kernel/.hg/branch 2008-06-11 23:19:10.000000000 -0600
-@@ -0,0 +1 @@
-+default
-diff -Nur btrfs-0.15/.hg/branch.cache kernel/.hg/branch.cache
---- btrfs-0.15/.hg/branch.cache 1969-12-31 17:00:00.000000000 -0700
-+++ kernel/.hg/branch.cache 2008-06-11 23:19:09.000000000 -0600
-@@ -0,0 +1,2 @@
-+9da425337329bbdd0c1cfd37deb058885744a140 558
-+9da425337329bbdd0c1cfd37deb058885744a140 default
-Files btrfs-0.15/.hg/dirstate and kernel/.hg/dirstate differ
-diff -Nur btrfs-0.15/.hg/hgrc kernel/.hg/hgrc
---- btrfs-0.15/.hg/hgrc 1969-12-31 17:00:00.000000000 -0700
-+++ kernel/.hg/hgrc 2008-06-11 23:19:09.000000000 -0600
-@@ -0,0 +1,2 @@
-+[paths]
-+default = http://www.kernel.org/hg/btrfs/kernel
-diff -Nur btrfs-0.15/.hg/requires kernel/.hg/requires
---- btrfs-0.15/.hg/requires 1969-12-31 17:00:00.000000000 -0700
-+++ kernel/.hg/requires 2008-06-11 23:19:04.000000000 -0600
-@@ -0,0 +1,2 @@
-+revlogv1
-+store
-Files btrfs-0.15/.hg/store/00changelog.d and kernel/.hg/store/00changelog.d differ
-Files btrfs-0.15/.hg/store/00changelog.i and kernel/.hg/store/00changelog.i differ
-Files btrfs-0.15/.hg/store/00manifest.d and kernel/.hg/store/00manifest.d differ
-Files btrfs-0.15/.hg/store/00manifest.i and kernel/.hg/store/00manifest.i differ
-Files btrfs-0.15/.hg/store/data/.hgtags.i and kernel/.hg/store/data/.hgtags.i differ
-Files btrfs-0.15/.hg/store/data/_c_o_p_y_i_n_g.i and kernel/.hg/store/data/_c_o_p_y_i_n_g.i differ
-Files btrfs-0.15/.hg/store/data/_i_n_s_t_a_l_l.i and kernel/.hg/store/data/_i_n_s_t_a_l_l.i differ
-Files btrfs-0.15/.hg/store/data/_makefile.i and kernel/.hg/store/data/_makefile.i differ
-Files btrfs-0.15/.hg/store/data/_t_o_d_o.i and kernel/.hg/store/data/_t_o_d_o.i differ
-Files btrfs-0.15/.hg/store/data/acl.c.i and kernel/.hg/store/data/acl.c.i differ
-Files btrfs-0.15/.hg/store/data/bit-radix.c.i and kernel/.hg/store/data/bit-radix.c.i differ
-Files btrfs-0.15/.hg/store/data/bit-radix.h.i and kernel/.hg/store/data/bit-radix.h.i differ
-Files btrfs-0.15/.hg/store/data/btrfs__inode.h.i and kernel/.hg/store/data/btrfs__inode.h.i differ
-Files btrfs-0.15/.hg/store/data/compat.h.i and kernel/.hg/store/data/compat.h.i differ
-Files btrfs-0.15/.hg/store/data/crc32c.h.i and kernel/.hg/store/data/crc32c.h.i differ
-Files btrfs-0.15/.hg/store/data/ctree.c.i and kernel/.hg/store/data/ctree.c.i differ
-Files btrfs-0.15/.hg/store/data/ctree.h.i and kernel/.hg/store/data/ctree.h.i differ
-Files btrfs-0.15/.hg/store/data/debug-tree.c.i and kernel/.hg/store/data/debug-tree.c.i differ
-Files btrfs-0.15/.hg/store/data/dir-item.c.i and kernel/.hg/store/data/dir-item.c.i differ
-Files btrfs-0.15/.hg/store/data/dir-test.c.i and kernel/.hg/store/data/dir-test.c.i differ
-Files btrfs-0.15/.hg/store/data/disk-io.c.i and kernel/.hg/store/data/disk-io.c.i differ
-Files btrfs-0.15/.hg/store/data/disk-io.h.i and kernel/.hg/store/data/disk-io.h.i differ
-Files btrfs-0.15/.hg/store/data/extent-tree.c.i and kernel/.hg/store/data/extent-tree.c.i differ
-Files btrfs-0.15/.hg/store/data/extent__io.c.i and kernel/.hg/store/data/extent__io.c.i differ
-Files btrfs-0.15/.hg/store/data/extent__io.h.i and kernel/.hg/store/data/extent__io.h.i differ
-Files btrfs-0.15/.hg/store/data/extent__map.c.i and kernel/.hg/store/data/extent__map.c.i differ
-Files btrfs-0.15/.hg/store/data/extent__map.h.i and kernel/.hg/store/data/extent__map.h.i differ
-Files btrfs-0.15/.hg/store/data/file-item.c.i and kernel/.hg/store/data/file-item.c.i differ
-Files btrfs-0.15/.hg/store/data/file.c.i and kernel/.hg/store/data/file.c.i differ
-Files btrfs-0.15/.hg/store/data/hash.c.i and kernel/.hg/store/data/hash.c.i differ
-Files btrfs-0.15/.hg/store/data/hash.h.i and kernel/.hg/store/data/hash.h.i differ
-Files btrfs-0.15/.hg/store/data/hasher.c.i and kernel/.hg/store/data/hasher.c.i differ
-Files btrfs-0.15/.hg/store/data/inode-item.c.i and kernel/.hg/store/data/inode-item.c.i differ
-Files btrfs-0.15/.hg/store/data/inode-map.c.i and kernel/.hg/store/data/inode-map.c.i differ
-Files btrfs-0.15/.hg/store/data/inode.c.i and kernel/.hg/store/data/inode.c.i differ
-Files btrfs-0.15/.hg/store/data/ioctl.h.i and kernel/.hg/store/data/ioctl.h.i differ
-Files btrfs-0.15/.hg/store/data/kerncompat.h.i and kernel/.hg/store/data/kerncompat.h.i differ
-Files btrfs-0.15/.hg/store/data/list.h.i and kernel/.hg/store/data/list.h.i differ
-Files btrfs-0.15/.hg/store/data/mkfs.c.i and kernel/.hg/store/data/mkfs.c.i differ
-Files btrfs-0.15/.hg/store/data/ordered-data.c.i and kernel/.hg/store/data/ordered-data.c.i differ
-Files btrfs-0.15/.hg/store/data/ordered-data.h.i and kernel/.hg/store/data/ordered-data.h.i differ
-Files btrfs-0.15/.hg/store/data/print-tree.c.i and kernel/.hg/store/data/print-tree.c.i differ
-Files btrfs-0.15/.hg/store/data/print-tree.h.i and kernel/.hg/store/data/print-tree.h.i differ
-Files btrfs-0.15/.hg/store/data/quick-test.c.i and kernel/.hg/store/data/quick-test.c.i differ
-Files btrfs-0.15/.hg/store/data/radix-tree.c.i and kernel/.hg/store/data/radix-tree.c.i differ
-Files btrfs-0.15/.hg/store/data/radix-tree.h.i and kernel/.hg/store/data/radix-tree.h.i differ
-Files btrfs-0.15/.hg/store/data/random-test.c.i and kernel/.hg/store/data/random-test.c.i differ
-Files btrfs-0.15/.hg/store/data/root-tree.c.i and kernel/.hg/store/data/root-tree.c.i differ
-Files btrfs-0.15/.hg/store/data/struct-funcs.c.i and kernel/.hg/store/data/struct-funcs.c.i differ
-Files btrfs-0.15/.hg/store/data/super.c.i and kernel/.hg/store/data/super.c.i differ
-Files btrfs-0.15/.hg/store/data/sysfs.c.i and kernel/.hg/store/data/sysfs.c.i differ
-Files btrfs-0.15/.hg/store/data/transaction.c.i and kernel/.hg/store/data/transaction.c.i differ
-Files btrfs-0.15/.hg/store/data/transaction.h.i and kernel/.hg/store/data/transaction.h.i differ
-Files btrfs-0.15/.hg/store/data/tree-defrag.c.i and kernel/.hg/store/data/tree-defrag.c.i differ
-Files btrfs-0.15/.hg/store/data/volumes.c.i and kernel/.hg/store/data/volumes.c.i differ
-Files btrfs-0.15/.hg/store/data/volumes.h.i and kernel/.hg/store/data/volumes.h.i differ
-Files btrfs-0.15/.hg/store/data/xattr.c.i and kernel/.hg/store/data/xattr.c.i differ
-Files btrfs-0.15/.hg/store/data/xattr.h.i and kernel/.hg/store/data/xattr.h.i differ
-Files btrfs-0.15/.hg/store/undo and kernel/.hg/store/undo differ
-diff -Nur btrfs-0.15/.hg_archival.txt kernel/.hg_archival.txt
---- btrfs-0.15/.hg_archival.txt 2008-05-29 08:31:43.000000000 -0600
-+++ kernel/.hg_archival.txt 1969-12-31 17:00:00.000000000 -0700
-@@ -1,2 +0,0 @@
--repo: 972e56533d49456b288abe364ba0295fa8c0e0ad
--node: 4b7e2b315a32d2a1175f70f39f38b8824d8ed9e1
-diff -Nur btrfs-0.15/transaction.c kernel/transaction.c
---- btrfs-0.15/transaction.c 2008-05-29 08:31:43.000000000 -0600
-+++ kernel/transaction.c 2008-06-11 23:19:10.000000000 -0600
-@@ -56,7 +56,6 @@
- total_trans++;
- BUG_ON(!cur_trans);
- root->fs_info->generation++;
-- root->fs_info->running_transaction = cur_trans;
- root->fs_info->last_alloc = 0;
- root->fs_info->last_data_alloc = 0;
- cur_trans->num_writers = 1;
-@@ -74,6 +73,9 @@
- extent_io_tree_init(&cur_trans->dirty_pages,
- root->fs_info->btree_inode->i_mapping,
- GFP_NOFS);
-+ spin_lock(&root->fs_info->new_trans_lock);
-+ root->fs_info->running_transaction = cur_trans;
-+ spin_unlock(&root->fs_info->new_trans_lock);
- } else {
- cur_trans->num_writers++;
- cur_trans->num_joined++;
diff --git a/sys-fs/btrfs/files/btrfs-0.16-hotfix-1.patch b/sys-fs/btrfs/files/btrfs-0.16-hotfix-1.patch
deleted file mode 100644
index dcd6c397cb9b..000000000000
--- a/sys-fs/btrfs/files/btrfs-0.16-hotfix-1.patch
+++ /dev/null
@@ -1,992 +0,0 @@
-diff -Nurp btrfs-0.16/async-thread.c btrfs-0.16.new/async-thread.c
---- btrfs-0.16/async-thread.c 2008-08-05 12:13:37.000000000 -0600
-+++ btrfs-0.16.new/async-thread.c 2008-08-20 17:43:19.211404694 -0600
-@@ -49,6 +49,8 @@ struct btrfs_worker_thread {
- /* number of things on the pending list */
- atomic_t num_pending;
-
-+ unsigned long sequence;
-+
- /* protects the pending list. */
- spinlock_t lock;
-
-@@ -153,7 +155,7 @@ int btrfs_stop_workers(struct btrfs_work
- /*
- * simple init on struct btrfs_workers
- */
--void btrfs_init_workers(struct btrfs_workers *workers, int max)
-+void btrfs_init_workers(struct btrfs_workers *workers, char *name, int max)
- {
- workers->num_workers = 0;
- INIT_LIST_HEAD(&workers->worker_list);
-@@ -161,6 +163,7 @@ void btrfs_init_workers(struct btrfs_wor
- spin_lock_init(&workers->lock);
- workers->max_workers = max;
- workers->idle_thresh = 32;
-+ workers->name = name;
- }
-
- /*
-@@ -184,7 +187,9 @@ int btrfs_start_workers(struct btrfs_wor
- INIT_LIST_HEAD(&worker->worker_list);
- spin_lock_init(&worker->lock);
- atomic_set(&worker->num_pending, 0);
-- worker->task = kthread_run(worker_loop, worker, "btrfs");
-+ worker->task = kthread_run(worker_loop, worker,
-+ "btrfs-%s-%d", workers->name,
-+ workers->num_workers + i);
- worker->workers = workers;
- if (IS_ERR(worker->task)) {
- kfree(worker);
-@@ -194,6 +199,7 @@ int btrfs_start_workers(struct btrfs_wor
-
- spin_lock_irq(&workers->lock);
- list_add_tail(&worker->worker_list, &workers->idle_list);
-+ worker->idle = 1;
- workers->num_workers++;
- spin_unlock_irq(&workers->lock);
- }
-@@ -235,7 +241,10 @@ static struct btrfs_worker_thread *next_
- */
- next = workers->worker_list.next;
- worker = list_entry(next, struct btrfs_worker_thread, worker_list);
-- list_move_tail(next, &workers->worker_list);
-+ atomic_inc(&worker->num_pending);
-+ worker->sequence++;
-+ if (worker->sequence % workers->idle_thresh == 0)
-+ list_move_tail(next, &workers->worker_list);
- return worker;
- }
-
-diff -Nurp btrfs-0.16/async-thread.h btrfs-0.16.new/async-thread.h
---- btrfs-0.16/async-thread.h 2008-08-05 12:13:37.000000000 -0600
-+++ btrfs-0.16.new/async-thread.h 2008-08-20 17:43:19.211404694 -0600
-@@ -69,11 +69,14 @@ struct btrfs_workers {
-
- /* lock for finding the next worker thread to queue on */
- spinlock_t lock;
-+
-+ /* extra name for this worker */
-+ char *name;
- };
-
- int btrfs_queue_worker(struct btrfs_workers *workers, struct btrfs_work *work);
- int btrfs_start_workers(struct btrfs_workers *workers, int num_workers);
- int btrfs_stop_workers(struct btrfs_workers *workers);
--void btrfs_init_workers(struct btrfs_workers *workers, int max);
-+void btrfs_init_workers(struct btrfs_workers *workers, char *name, int max);
- int btrfs_requeue_work(struct btrfs_work *work);
- #endif
-diff -Nurp btrfs-0.16/compat.h btrfs-0.16.new/compat.h
---- btrfs-0.16/compat.h 2008-08-05 12:13:37.000000000 -0600
-+++ btrfs-0.16.new/compat.h 2008-08-20 17:43:19.501402495 -0600
-@@ -1,6 +1,9 @@
- #ifndef _COMPAT_H_
- #define _COMPAT_H_
-
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,26)
-+#define trylock_page(page) (!TestSetPageLocked(page))
-+#endif
-
- /*
- * Even if AppArmor isn't enabled, it still has different prototypes.
-diff -Nurp btrfs-0.16/ctree.h btrfs-0.16.new/ctree.h
---- btrfs-0.16/ctree.h 2008-08-05 12:13:37.000000000 -0600
-+++ btrfs-0.16.new/ctree.h 2008-08-20 17:43:19.521406669 -0600
-@@ -526,6 +526,7 @@ struct btrfs_fs_info {
- struct btrfs_transaction *running_transaction;
- wait_queue_head_t transaction_throttle;
- wait_queue_head_t transaction_wait;
-+ wait_queue_head_t async_submit_wait;
- struct btrfs_super_block super_copy;
- struct btrfs_super_block super_for_commit;
- struct block_device *__bdev;
-@@ -544,6 +545,7 @@ struct btrfs_fs_info {
- struct list_head hashers;
- struct list_head dead_roots;
- atomic_t nr_async_submits;
-+ atomic_t nr_async_bios;
-
- /*
- * this is used by the balancing code to wait for all the pending
-@@ -1648,7 +1650,7 @@ int btrfs_csum_truncate(struct btrfs_tra
- /* inode.c */
-
- /* RHEL and EL kernels have a patch that renames PG_checked to FsMisc */
--#ifdef ClearPageFsMisc
-+#if defined(ClearPageFsMisc) && !defined(ClearPageChecked)
- #define ClearPageChecked ClearPageFsMisc
- #define SetPageChecked SetPageFsMisc
- #define PageChecked PageFsMisc
-diff -Nurp btrfs-0.16/disk-io.c btrfs-0.16.new/disk-io.c
---- btrfs-0.16/disk-io.c 2008-08-05 12:13:37.000000000 -0600
-+++ btrfs-0.16.new/disk-io.c 2008-08-20 17:43:19.541408335 -0600
-@@ -429,14 +429,38 @@ int btrfs_bio_wq_end_io(struct btrfs_fs_
- return 0;
- }
-
-+unsigned long btrfs_async_submit_limit(struct btrfs_fs_info *info)
-+{
-+ unsigned long limit = min_t(unsigned long,
-+ info->workers.max_workers,
-+ info->fs_devices->open_devices);
-+ return 256 * limit;
-+}
-+
-+int btrfs_congested_async(struct btrfs_fs_info *info, int iodone)
-+{
-+ return atomic_read(&info->nr_async_bios) >
-+ btrfs_async_submit_limit(info);
-+}
-+
- static void run_one_async_submit(struct btrfs_work *work)
- {
- struct btrfs_fs_info *fs_info;
- struct async_submit_bio *async;
-+ int limit;
-
- async = container_of(work, struct async_submit_bio, work);
- fs_info = BTRFS_I(async->inode)->root->fs_info;
-+
-+ limit = btrfs_async_submit_limit(fs_info);
-+ limit = limit * 2 / 3;
-+
- atomic_dec(&fs_info->nr_async_submits);
-+
-+ if (atomic_read(&fs_info->nr_async_submits) < limit &&
-+ waitqueue_active(&fs_info->async_submit_wait))
-+ wake_up(&fs_info->async_submit_wait);
-+
- async->submit_bio_hook(async->inode, async->rw, async->bio,
- async->mirror_num);
- kfree(async);
-@@ -447,6 +471,7 @@ int btrfs_wq_submit_bio(struct btrfs_fs_
- extent_submit_bio_hook_t *submit_bio_hook)
- {
- struct async_submit_bio *async;
-+ int limit = btrfs_async_submit_limit(fs_info);
-
- async = kmalloc(sizeof(*async), GFP_NOFS);
- if (!async)
-@@ -461,6 +486,10 @@ int btrfs_wq_submit_bio(struct btrfs_fs_
- async->work.flags = 0;
- atomic_inc(&fs_info->nr_async_submits);
- btrfs_queue_worker(&fs_info->workers, &async->work);
-+
-+ wait_event_timeout(fs_info->async_submit_wait,
-+ (atomic_read(&fs_info->nr_async_submits) < limit),
-+ HZ/10);
- return 0;
- }
-
-@@ -475,11 +504,11 @@ static int __btree_submit_bio_hook(struc
-
- /*
- * when we're called for a write, we're already in the async
-- * submission context. Just jump ingo btrfs_map_bio
-+ * submission context. Just jump into btrfs_map_bio
- */
- if (rw & (1 << BIO_RW)) {
- return btrfs_map_bio(BTRFS_I(inode)->root, rw, bio,
-- mirror_num, 0);
-+ mirror_num, 1);
- }
-
- /*
-@@ -511,6 +540,12 @@ static int btree_writepage(struct page *
- {
- struct extent_io_tree *tree;
- tree = &BTRFS_I(page->mapping->host)->io_tree;
-+
-+ if (current->flags & PF_MEMALLOC) {
-+ redirty_page_for_writepage(wbc, page);
-+ unlock_page(page);
-+ return 0;
-+ }
- return extent_write_full_page(tree, page, btree_get_extent, wbc);
- }
-
-@@ -522,16 +557,11 @@ static int btree_writepages(struct addre
- if (wbc->sync_mode == WB_SYNC_NONE) {
- u64 num_dirty;
- u64 start = 0;
-- unsigned long thresh = 96 * 1024 * 1024;
-+ unsigned long thresh = 8 * 1024 * 1024;
-
- if (wbc->for_kupdate)
- return 0;
-
-- if (current_is_pdflush()) {
-- thresh = 96 * 1024 * 1024;
-- } else {
-- thresh = 8 * 1024 * 1024;
-- }
- num_dirty = count_range_bits(tree, &start, (u64)-1,
- thresh, EXTENT_DIRTY);
- if (num_dirty < thresh) {
-@@ -938,15 +968,13 @@ static int btrfs_congested_fn(void *cong
- {
- struct btrfs_fs_info *info = (struct btrfs_fs_info *)congested_data;
- int ret = 0;
-- int limit = 256 * info->fs_devices->open_devices;
- struct list_head *cur;
- struct btrfs_device *device;
- struct backing_dev_info *bdi;
-
- if ((bdi_bits & (1 << BDI_write_congested)) &&
-- atomic_read(&info->nr_async_submits) > limit) {
-+ btrfs_congested_async(info, 0))
- return 1;
-- }
-
- list_for_each(cur, &info->fs_devices->devices) {
- device = list_entry(cur, struct btrfs_device, dev_list);
-@@ -1250,6 +1278,7 @@ struct btrfs_root *open_ctree(struct sup
- INIT_LIST_HEAD(&fs_info->space_info);
- btrfs_mapping_init(&fs_info->mapping_tree);
- atomic_set(&fs_info->nr_async_submits, 0);
-+ atomic_set(&fs_info->nr_async_bios, 0);
- atomic_set(&fs_info->throttles, 0);
- atomic_set(&fs_info->throttle_gen, 0);
- fs_info->sb = sb;
-@@ -1311,6 +1340,7 @@ struct btrfs_root *open_ctree(struct sup
- mutex_init(&fs_info->volume_mutex);
- init_waitqueue_head(&fs_info->transaction_throttle);
- init_waitqueue_head(&fs_info->transaction_wait);
-+ init_waitqueue_head(&fs_info->async_submit_wait);
-
- #if 0
- ret = add_hasher(fs_info, "crc32c");
-@@ -1347,8 +1377,11 @@ struct btrfs_root *open_ctree(struct sup
- * queue work function gets called at interrupt time, and so it
- * cannot dynamically grow.
- */
-- btrfs_init_workers(&fs_info->workers, fs_info->thread_pool_size);
-- btrfs_init_workers(&fs_info->submit_workers, fs_info->thread_pool_size);
-+ btrfs_init_workers(&fs_info->workers, "worker",
-+ fs_info->thread_pool_size);
-+ btrfs_init_workers(&fs_info->submit_workers, "submit",
-+ min_t(u64, fs_devices->num_devices,
-+ fs_info->thread_pool_size));
-
- /* a higher idle thresh on the submit workers makes it much more
- * likely that bios will be send down in a sane order to the
-@@ -1356,9 +1389,18 @@ struct btrfs_root *open_ctree(struct sup
- */
- fs_info->submit_workers.idle_thresh = 64;
-
-- btrfs_init_workers(&fs_info->fixup_workers, 1);
-- btrfs_init_workers(&fs_info->endio_workers, fs_info->thread_pool_size);
-- btrfs_init_workers(&fs_info->endio_write_workers,
-+ /* fs_info->workers is responsible for checksumming file data
-+ * blocks and metadata. Using a larger idle thresh allows each
-+ * worker thread to operate on things in roughly the order they
-+ * were sent by the writeback daemons, improving overall locality
-+ * of the IO going down the pipe.
-+ */
-+ fs_info->workers.idle_thresh = 128;
-+
-+ btrfs_init_workers(&fs_info->fixup_workers, "fixup", 1);
-+ btrfs_init_workers(&fs_info->endio_workers, "endio",
-+ fs_info->thread_pool_size);
-+ btrfs_init_workers(&fs_info->endio_write_workers, "endio-write",
- fs_info->thread_pool_size);
-
- /*
-@@ -1823,10 +1865,10 @@ void btrfs_btree_balance_dirty(struct bt
- struct extent_io_tree *tree;
- u64 num_dirty;
- u64 start = 0;
-- unsigned long thresh = 16 * 1024 * 1024;
-+ unsigned long thresh = 96 * 1024 * 1024;
- tree = &BTRFS_I(root->fs_info->btree_inode)->io_tree;
-
-- if (current_is_pdflush())
-+ if (current_is_pdflush() || current->flags & PF_MEMALLOC)
- return;
-
- num_dirty = count_range_bits(tree, &start, (u64)-1,
-diff -Nurp btrfs-0.16/disk-io.h btrfs-0.16.new/disk-io.h
---- btrfs-0.16/disk-io.h 2008-08-05 12:13:37.000000000 -0600
-+++ btrfs-0.16.new/disk-io.h 2008-08-20 17:43:19.541408335 -0600
-@@ -72,4 +72,6 @@ int btrfs_bio_wq_end_io(struct btrfs_fs_
- int btrfs_wq_submit_bio(struct btrfs_fs_info *fs_info, struct inode *inode,
- int rw, struct bio *bio, int mirror_num,
- extent_submit_bio_hook_t *submit_bio_hook);
-+int btrfs_congested_async(struct btrfs_fs_info *info, int iodone);
-+unsigned long btrfs_async_submit_limit(struct btrfs_fs_info *info);
- #endif
-diff -Nurp btrfs-0.16/extent_io.c btrfs-0.16.new/extent_io.c
---- btrfs-0.16/extent_io.c 2008-08-05 12:13:37.000000000 -0600
-+++ btrfs-0.16.new/extent_io.c 2008-08-20 17:43:19.561407722 -0600
-@@ -14,6 +14,9 @@
- #include <linux/pagevec.h>
- #include "extent_io.h"
- #include "extent_map.h"
-+#include "compat.h"
-+#include "ctree.h"
-+#include "btrfs_inode.h"
-
- /* temporary define until extent_map moves out of btrfs */
- struct kmem_cache *btrfs_cache_create(const char *name, size_t size,
-@@ -1393,15 +1396,11 @@ static int end_bio_extent_writepage(stru
- {
- int uptodate = err == 0;
- struct bio_vec *bvec = bio->bi_io_vec + bio->bi_vcnt - 1;
-- struct extent_state *state = bio->bi_private;
-- struct extent_io_tree *tree = state->tree;
-- struct rb_node *node;
-+ struct extent_io_tree *tree;
- u64 start;
- u64 end;
-- u64 cur;
- int whole_page;
- int ret;
-- unsigned long flags;
-
- #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,23)
- if (bio->bi_size)
-@@ -1409,6 +1408,8 @@ static int end_bio_extent_writepage(stru
- #endif
- do {
- struct page *page = bvec->bv_page;
-+ tree = &BTRFS_I(page->mapping->host)->io_tree;
-+
- start = ((u64)page->index << PAGE_CACHE_SHIFT) +
- bvec->bv_offset;
- end = start + bvec->bv_len - 1;
-@@ -1422,7 +1423,7 @@ static int end_bio_extent_writepage(stru
- prefetchw(&bvec->bv_page->flags);
- if (tree->ops && tree->ops->writepage_end_io_hook) {
- ret = tree->ops->writepage_end_io_hook(page, start,
-- end, state, uptodate);
-+ end, NULL, uptodate);
- if (ret)
- uptodate = 0;
- }
-@@ -1430,9 +1431,8 @@ static int end_bio_extent_writepage(stru
- if (!uptodate && tree->ops &&
- tree->ops->writepage_io_failed_hook) {
- ret = tree->ops->writepage_io_failed_hook(bio, page,
-- start, end, state);
-+ start, end, NULL);
- if (ret == 0) {
-- state = NULL;
- uptodate = (err == 0);
- continue;
- }
-@@ -1444,68 +1444,7 @@ static int end_bio_extent_writepage(stru
- SetPageError(page);
- }
-
-- /*
-- * bios can get merged in funny ways, and so we need to
-- * be careful with the state variable. We know the
-- * state won't be merged with others because it has
-- * WRITEBACK set, but we can't be sure each biovec is
-- * sequential in the file. So, if our cached state
-- * doesn't match the expected end, search the tree
-- * for the correct one.
-- */
--
-- spin_lock_irqsave(&tree->lock, flags);
-- if (!state || state->end != end) {
-- state = NULL;
-- node = __etree_search(tree, start, NULL, NULL);
-- if (node) {
-- state = rb_entry(node, struct extent_state,
-- rb_node);
-- if (state->end != end ||
-- !(state->state & EXTENT_WRITEBACK))
-- state = NULL;
-- }
-- if (!state) {
-- spin_unlock_irqrestore(&tree->lock, flags);
-- clear_extent_writeback(tree, start,
-- end, GFP_ATOMIC);
-- goto next_io;
-- }
-- }
-- cur = end;
-- while(1) {
-- struct extent_state *clear = state;
-- cur = state->start;
-- node = rb_prev(&state->rb_node);
-- if (node) {
-- state = rb_entry(node,
-- struct extent_state,
-- rb_node);
-- } else {
-- state = NULL;
-- }
--
-- clear_state_bit(tree, clear, EXTENT_WRITEBACK,
-- 1, 0);
-- if (cur == start)
-- break;
-- if (cur < start) {
-- WARN_ON(1);
-- break;
-- }
-- if (!node)
-- break;
-- }
-- /* before releasing the lock, make sure the next state
-- * variable has the expected bits set and corresponds
-- * to the correct offsets in the file
-- */
-- if (state && (state->end + 1 != start ||
-- !(state->state & EXTENT_WRITEBACK))) {
-- state = NULL;
-- }
-- spin_unlock_irqrestore(&tree->lock, flags);
--next_io:
-+ clear_extent_writeback(tree, start, end, GFP_ATOMIC);
-
- if (whole_page)
- end_page_writeback(page);
-@@ -1538,13 +1477,9 @@ static int end_bio_extent_readpage(struc
- {
- int uptodate = test_bit(BIO_UPTODATE, &bio->bi_flags);
- struct bio_vec *bvec = bio->bi_io_vec + bio->bi_vcnt - 1;
-- struct extent_state *state = bio->bi_private;
-- struct extent_io_tree *tree = state->tree;
-- struct rb_node *node;
-+ struct extent_io_tree *tree;
- u64 start;
- u64 end;
-- u64 cur;
-- unsigned long flags;
- int whole_page;
- int ret;
-
-@@ -1555,6 +1490,8 @@ static int end_bio_extent_readpage(struc
-
- do {
- struct page *page = bvec->bv_page;
-+ tree = &BTRFS_I(page->mapping->host)->io_tree;
-+
- start = ((u64)page->index << PAGE_CACHE_SHIFT) +
- bvec->bv_offset;
- end = start + bvec->bv_len - 1;
-@@ -1569,80 +1506,26 @@ static int end_bio_extent_readpage(struc
-
- if (uptodate && tree->ops && tree->ops->readpage_end_io_hook) {
- ret = tree->ops->readpage_end_io_hook(page, start, end,
-- state);
-+ NULL);
- if (ret)
- uptodate = 0;
- }
- if (!uptodate && tree->ops &&
- tree->ops->readpage_io_failed_hook) {
- ret = tree->ops->readpage_io_failed_hook(bio, page,
-- start, end, state);
-+ start, end, NULL);
- if (ret == 0) {
-- state = NULL;
- uptodate =
- test_bit(BIO_UPTODATE, &bio->bi_flags);
- continue;
- }
- }
-
-- spin_lock_irqsave(&tree->lock, flags);
-- if (!state || state->end != end) {
-- state = NULL;
-- node = __etree_search(tree, start, NULL, NULL);
-- if (node) {
-- state = rb_entry(node, struct extent_state,
-- rb_node);
-- if (state->end != end ||
-- !(state->state & EXTENT_LOCKED))
-- state = NULL;
-- }
-- if (!state) {
-- spin_unlock_irqrestore(&tree->lock, flags);
-- if (uptodate)
-- set_extent_uptodate(tree, start, end,
-- GFP_ATOMIC);
-- unlock_extent(tree, start, end, GFP_ATOMIC);
-- goto next_io;
-- }
-- }
-+ if (uptodate)
-+ set_extent_uptodate(tree, start, end,
-+ GFP_ATOMIC);
-+ unlock_extent(tree, start, end, GFP_ATOMIC);
-
-- cur = end;
-- while(1) {
-- struct extent_state *clear = state;
-- cur = state->start;
-- node = rb_prev(&state->rb_node);
-- if (node) {
-- state = rb_entry(node,
-- struct extent_state,
-- rb_node);
-- } else {
-- state = NULL;
-- }
-- if (uptodate) {
-- set_state_cb(tree, clear, EXTENT_UPTODATE);
-- clear->state |= EXTENT_UPTODATE;
-- }
-- clear_state_bit(tree, clear, EXTENT_LOCKED,
-- 1, 0);
-- if (cur == start)
-- break;
-- if (cur < start) {
-- WARN_ON(1);
-- break;
-- }
-- if (!node)
-- break;
-- }
-- /* before releasing the lock, make sure the next state
-- * variable has the expected bits set and corresponds
-- * to the correct offsets in the file
-- */
-- if (state && (state->end + 1 != start ||
-- !(state->state & EXTENT_LOCKED))) {
-- state = NULL;
-- }
-- spin_unlock_irqrestore(&tree->lock, flags);
--next_io:
- if (whole_page) {
- if (uptodate) {
- SetPageUptodate(page);
-@@ -1682,8 +1565,7 @@ static int end_bio_extent_preparewrite(s
- {
- const int uptodate = test_bit(BIO_UPTODATE, &bio->bi_flags);
- struct bio_vec *bvec = bio->bi_io_vec + bio->bi_vcnt - 1;
-- struct extent_state *state = bio->bi_private;
-- struct extent_io_tree *tree = state->tree;
-+ struct extent_io_tree *tree;
- u64 start;
- u64 end;
-
-@@ -1694,6 +1576,8 @@ static int end_bio_extent_preparewrite(s
-
- do {
- struct page *page = bvec->bv_page;
-+ tree = &BTRFS_I(page->mapping->host)->io_tree;
-+
- start = ((u64)page->index << PAGE_CACHE_SHIFT) +
- bvec->bv_offset;
- end = start + bvec->bv_len - 1;
-@@ -1764,7 +1648,7 @@ static int submit_one_bio(int rw, struct
- BUG_ON(state->end != end);
- spin_unlock_irq(&tree->lock);
-
-- bio->bi_private = state;
-+ bio->bi_private = NULL;
-
- bio_get(bio);
-
-@@ -3055,7 +2939,7 @@ int read_extent_buffer_pages(struct exte
- for (i = start_i; i < num_pages; i++) {
- page = extent_buffer_page(eb, i);
- if (!wait) {
-- if (TestSetPageLocked(page))
-+ if (!trylock_page(page))
- goto unlock_exit;
- } else {
- lock_page(page);
-diff -Nurp btrfs-0.16/extent_map.c btrfs-0.16.new/extent_map.c
---- btrfs-0.16/extent_map.c 2008-08-05 12:13:37.000000000 -0600
-+++ btrfs-0.16.new/extent_map.c 2008-08-20 17:43:19.571405082 -0600
-@@ -207,7 +207,14 @@ int add_extent_mapping(struct extent_map
- int ret = 0;
- struct extent_map *merge = NULL;
- struct rb_node *rb;
-+ struct extent_map *exist;
-
-+ exist = lookup_extent_mapping(tree, em->start, em->len);
-+ if (exist) {
-+ free_extent_map(exist);
-+ ret = -EEXIST;
-+ goto out;
-+ }
- assert_spin_locked(&tree->lock);
- rb = tree_insert(&tree->map, em->start, &em->rb_node);
- if (rb) {
-diff -Nurp btrfs-0.16/file-item.c btrfs-0.16.new/file-item.c
---- btrfs-0.16/file-item.c 2008-08-05 12:13:37.000000000 -0600
-+++ btrfs-0.16.new/file-item.c 2008-08-20 17:43:19.571405082 -0600
-@@ -134,7 +134,6 @@ int btrfs_lookup_file_extent(struct btrf
- return ret;
- }
-
--#if 0 /* broken */
- int btrfs_lookup_bio_sums(struct btrfs_root *root, struct inode *inode,
- struct bio *bio)
- {
-@@ -151,6 +150,8 @@ int btrfs_lookup_bio_sums(struct btrfs_r
- struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree;
-
- path = btrfs_alloc_path();
-+ if (bio->bi_size > PAGE_CACHE_SIZE * 8)
-+ path->reada = 2;
-
- WARN_ON(bio->bi_vcnt <= 0);
-
-@@ -211,7 +212,6 @@ found:
- btrfs_free_path(path);
- return 0;
- }
--#endif
-
- int btrfs_csum_one_bio(struct btrfs_root *root, struct inode *inode,
- struct bio *bio)
-@@ -321,6 +321,7 @@ again:
- file_key.offset = offset;
- btrfs_set_key_type(&file_key, BTRFS_CSUM_ITEM_KEY);
-
-+ mutex_lock(&BTRFS_I(inode)->csum_mutex);
- item = btrfs_lookup_csum(trans, root, path, objectid, offset, 1);
- if (!IS_ERR(item)) {
- leaf = path->nodes[0];
-@@ -367,7 +368,7 @@ again:
- ret = btrfs_search_slot(trans, root, &file_key, path,
- BTRFS_CRC32_SIZE, 1);
- if (ret < 0)
-- goto fail;
-+ goto fail_unlock;
- if (ret == 0) {
- BUG();
- }
-@@ -411,10 +412,10 @@ insert:
- ret = btrfs_insert_empty_item(trans, root, path, &file_key,
- ins_size);
- if (ret < 0)
-- goto fail;
-+ goto fail_unlock;
- if (ret != 0) {
- WARN_ON(1);
-- goto fail;
-+ goto fail_unlock;
- }
- csum:
- leaf = path->nodes[0];
-@@ -427,6 +428,8 @@ found:
- item_end = (struct btrfs_csum_item *)((unsigned char *)item_end +
- btrfs_item_size_nr(leaf, path->slots[0]));
- eb_token = NULL;
-+ mutex_unlock(&BTRFS_I(inode)->csum_mutex);
-+ cond_resched();
- next_sector:
-
- if (!eb_token ||
-@@ -467,13 +470,18 @@ next_sector:
- eb_token = NULL;
- }
- btrfs_mark_buffer_dirty(path->nodes[0]);
-+ cond_resched();
- if (total_bytes < sums->len) {
- btrfs_release_path(root, path);
- goto again;
- }
--fail:
-+out:
- btrfs_free_path(path);
- return ret;
-+
-+fail_unlock:
-+ mutex_unlock(&BTRFS_I(inode)->csum_mutex);
-+ goto out;
- }
-
- int btrfs_csum_truncate(struct btrfs_trans_handle *trans,
-diff -Nurp btrfs-0.16/inode.c btrfs-0.16.new/inode.c
---- btrfs-0.16/inode.c 2008-08-05 12:13:37.000000000 -0600
-+++ btrfs-0.16.new/inode.c 2008-08-20 17:43:19.601409609 -0600
-@@ -389,15 +389,15 @@ int btrfs_submit_bio_hook(struct inode *
- ret = btrfs_bio_wq_end_io(root->fs_info, bio, 0);
- BUG_ON(ret);
-
-- if (!(rw & (1 << BIO_RW))) {
-- goto mapit;
-- }
--
- if (btrfs_test_opt(root, NODATASUM) ||
- btrfs_test_flag(inode, NODATASUM)) {
- goto mapit;
- }
-
-+ if (!(rw & (1 << BIO_RW))) {
-+ btrfs_lookup_bio_sums(root, inode, bio);
-+ goto mapit;
-+ }
- return btrfs_wq_submit_bio(BTRFS_I(inode)->root->fs_info,
- inode, rw, bio, mirror_num,
- __btrfs_submit_bio_hook);
-@@ -415,10 +415,8 @@ static noinline int add_pending_csums(st
- btrfs_set_trans_block_group(trans, inode);
- list_for_each(cur, list) {
- sum = list_entry(cur, struct btrfs_ordered_sum, list);
-- mutex_lock(&BTRFS_I(inode)->csum_mutex);
- btrfs_csum_file_blocks(trans, BTRFS_I(inode)->root,
- inode, sum);
-- mutex_unlock(&BTRFS_I(inode)->csum_mutex);
- }
- return 0;
- }
-@@ -605,58 +603,6 @@ int btrfs_writepage_end_io_hook(struct p
- return btrfs_finish_ordered_io(page->mapping->host, start, end);
- }
-
--int btrfs_readpage_io_hook(struct page *page, u64 start, u64 end)
--{
-- int ret = 0;
-- struct inode *inode = page->mapping->host;
-- struct btrfs_root *root = BTRFS_I(inode)->root;
-- struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree;
-- struct btrfs_csum_item *item;
-- struct btrfs_path *path = NULL;
-- u32 csum;
--
-- if (btrfs_test_opt(root, NODATASUM) ||
-- btrfs_test_flag(inode, NODATASUM))
-- return 0;
--
-- /*
-- * It is possible there is an ordered extent that has
-- * not yet finished for this range in the file. If so,
-- * that extent will have a csum cached, and it will insert
-- * the sum after all the blocks in the extent are fully
-- * on disk. So, look for an ordered extent and use the
-- * sum if found. We have to do this before looking in the
-- * btree because csum items are pre-inserted based on
-- * the file size. btrfs_lookup_csum might find an item
-- * that still hasn't been fully filled.
-- */
-- ret = btrfs_find_ordered_sum(inode, start, &csum);
-- if (ret == 0)
-- goto found;
--
-- ret = 0;
-- path = btrfs_alloc_path();
-- item = btrfs_lookup_csum(NULL, root, path, inode->i_ino, start, 0);
-- if (IS_ERR(item)) {
-- ret = PTR_ERR(item);
-- /* a csum that isn't present is a preallocated region. */
-- if (ret == -ENOENT || ret == -EFBIG)
-- ret = 0;
-- csum = 0;
-- printk("no csum found for inode %lu start %Lu\n", inode->i_ino,
-- start);
-- goto out;
-- }
-- read_extent_buffer(path->nodes[0], &csum, (unsigned long)item,
-- BTRFS_CRC32_SIZE);
--found:
-- set_state_private(io_tree, start, csum);
--out:
-- if (path)
-- btrfs_free_path(path);
-- return ret;
--}
--
- struct io_failure_record {
- struct page *page;
- u64 start;
-@@ -1655,8 +1601,20 @@ static int btrfs_setattr(struct dentry *
- btrfs_truncate_page(inode->i_mapping, inode->i_size);
-
- hole_size = block_end - hole_start;
-- btrfs_wait_ordered_range(inode, hole_start, hole_size);
-- lock_extent(io_tree, hole_start, block_end - 1, GFP_NOFS);
-+ while(1) {
-+ struct btrfs_ordered_extent *ordered;
-+ btrfs_wait_ordered_range(inode, hole_start, hole_size);
-+
-+ lock_extent(io_tree, hole_start, block_end - 1, GFP_NOFS);
-+ ordered = btrfs_lookup_ordered_extent(inode, hole_start);
-+ if (ordered) {
-+ unlock_extent(io_tree, hole_start,
-+ block_end - 1, GFP_NOFS);
-+ btrfs_put_ordered_extent(ordered);
-+ } else {
-+ break;
-+ }
-+ }
-
- trans = btrfs_start_transaction(root, 1);
- btrfs_set_trans_block_group(trans, inode);
-@@ -1833,6 +1791,7 @@ static int btrfs_init_locked_inode(struc
- inode->i_ino = args->ino;
- BTRFS_I(inode)->root = args->root;
- BTRFS_I(inode)->delalloc_bytes = 0;
-+ inode->i_mapping->writeback_index = 0;
- BTRFS_I(inode)->disk_i_size = 0;
- BTRFS_I(inode)->index_cnt = (u64)-1;
- extent_map_tree_init(&BTRFS_I(inode)->extent_tree, GFP_NOFS);
-@@ -2239,6 +2198,7 @@ static struct inode *btrfs_new_inode(str
- mutex_init(&BTRFS_I(inode)->csum_mutex);
- mutex_init(&BTRFS_I(inode)->extent_mutex);
- BTRFS_I(inode)->delalloc_bytes = 0;
-+ inode->i_mapping->writeback_index = 0;
- BTRFS_I(inode)->disk_i_size = 0;
- BTRFS_I(inode)->root = root;
-
-@@ -2486,6 +2446,7 @@ static int btrfs_create(struct inode *di
- mutex_init(&BTRFS_I(inode)->extent_mutex);
- BTRFS_I(inode)->delalloc_bytes = 0;
- BTRFS_I(inode)->disk_i_size = 0;
-+ inode->i_mapping->writeback_index = 0;
- BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops;
- btrfs_ordered_inode_tree_init(&BTRFS_I(inode)->ordered_tree);
- }
-@@ -3549,6 +3510,7 @@ static int btrfs_symlink(struct inode *d
- mutex_init(&BTRFS_I(inode)->extent_mutex);
- BTRFS_I(inode)->delalloc_bytes = 0;
- BTRFS_I(inode)->disk_i_size = 0;
-+ inode->i_mapping->writeback_index = 0;
- BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops;
- btrfs_ordered_inode_tree_init(&BTRFS_I(inode)->ordered_tree);
- }
-@@ -3654,7 +3616,6 @@ static struct extent_io_ops btrfs_extent
- .fill_delalloc = run_delalloc_range,
- .submit_bio_hook = btrfs_submit_bio_hook,
- .merge_bio_hook = btrfs_merge_bio_hook,
-- .readpage_io_hook = btrfs_readpage_io_hook,
- .readpage_end_io_hook = btrfs_readpage_end_io_hook,
- .writepage_end_io_hook = btrfs_writepage_end_io_hook,
- .writepage_start_hook = btrfs_writepage_start_hook,
-diff -Nurp btrfs-0.16/transaction.c btrfs-0.16.new/transaction.c
---- btrfs-0.16/transaction.c 2008-08-05 12:13:37.000000000 -0600
-+++ btrfs-0.16.new/transaction.c 2008-08-20 17:43:19.641404933 -0600
-@@ -303,12 +303,12 @@ int btrfs_write_and_wait_transaction(str
- struct btrfs_root *root)
- {
- int ret;
-- int err;
-+ int err = 0;
- int werr = 0;
- struct extent_io_tree *dirty_pages;
- struct page *page;
- struct inode *btree_inode = root->fs_info->btree_inode;
-- u64 start;
-+ u64 start = 0;
- u64 end;
- unsigned long index;
-
-@@ -317,12 +317,13 @@ int btrfs_write_and_wait_transaction(str
- }
- dirty_pages = &trans->transaction->dirty_pages;
- while(1) {
-- ret = find_first_extent_bit(dirty_pages, 0, &start, &end,
-+ ret = find_first_extent_bit(dirty_pages, start, &start, &end,
- EXTENT_DIRTY);
- if (ret)
- break;
-- clear_extent_dirty(dirty_pages, start, end, GFP_NOFS);
- while(start <= end) {
-+ cond_resched();
-+
- index = start >> PAGE_CACHE_SHIFT;
- start = (u64)(index + 1) << PAGE_CACHE_SHIFT;
- page = find_lock_page(btree_inode->i_mapping, index);
-@@ -343,7 +344,30 @@ int btrfs_write_and_wait_transaction(str
- page_cache_release(page);
- }
- }
-- err = filemap_fdatawait(btree_inode->i_mapping);
-+ while(1) {
-+ ret = find_first_extent_bit(dirty_pages, 0, &start, &end,
-+ EXTENT_DIRTY);
-+ if (ret)
-+ break;
-+
-+ clear_extent_dirty(dirty_pages, start, end, GFP_NOFS);
-+ while(start <= end) {
-+ index = start >> PAGE_CACHE_SHIFT;
-+ start = (u64)(index + 1) << PAGE_CACHE_SHIFT;
-+ page = find_get_page(btree_inode->i_mapping, index);
-+ if (!page)
-+ continue;
-+ if (PageDirty(page)) {
-+ lock_page(page);
-+ err = write_one_page(page, 0);
-+ if (err)
-+ werr = err;
-+ }
-+ wait_on_page_writeback(page);
-+ page_cache_release(page);
-+ cond_resched();
-+ }
-+ }
- if (err)
- werr = err;
- return werr;
-diff -Nurp btrfs-0.16/volumes.c btrfs-0.16.new/volumes.c
---- btrfs-0.16/volumes.c 2008-08-05 12:13:37.000000000 -0600
-+++ btrfs-0.16.new/volumes.c 2008-08-20 17:43:19.651405254 -0600
-@@ -138,12 +138,18 @@ int run_scheduled_bios(struct btrfs_devi
- {
- struct bio *pending;
- struct backing_dev_info *bdi;
-+ struct btrfs_fs_info *fs_info;
- struct bio *tail;
- struct bio *cur;
- int again = 0;
- unsigned long num_run = 0;
-+ unsigned long limit;
-
- bdi = device->bdev->bd_inode->i_mapping->backing_dev_info;
-+ fs_info = device->dev_root->fs_info;
-+ limit = btrfs_async_submit_limit(fs_info);
-+ limit = limit * 2 / 3;
-+
- loop:
- spin_lock(&device->io_lock);
-
-@@ -179,7 +185,11 @@ loop:
- cur = pending;
- pending = pending->bi_next;
- cur->bi_next = NULL;
-- atomic_dec(&device->dev_root->fs_info->nr_async_submits);
-+ atomic_dec(&fs_info->nr_async_bios);
-+
-+ if (atomic_read(&fs_info->nr_async_bios) < limit &&
-+ waitqueue_active(&fs_info->async_submit_wait))
-+ wake_up(&fs_info->async_submit_wait);
-
- BUG_ON(atomic_read(&cur->bi_cnt) == 0);
- bio_get(cur);
-@@ -2135,6 +2145,7 @@ int schedule_bio(struct btrfs_root *root
- int rw, struct bio *bio)
- {
- int should_queue = 1;
-+ unsigned long limit;
-
- /* don't bother with additional async steps for reads, right now */
- if (!(rw & (1 << BIO_RW))) {
-@@ -2145,12 +2156,12 @@ int schedule_bio(struct btrfs_root *root
- }
-
- /*
-- * nr_async_sumbits allows us to reliably return congestion to the
-+ * nr_async_bios allows us to reliably return congestion to the
- * higher layers. Otherwise, the async bio makes it appear we have
- * made progress against dirty pages when we've really just put it
- * on a queue for later
- */
-- atomic_inc(&root->fs_info->nr_async_submits);
-+ atomic_inc(&root->fs_info->nr_async_bios);
- WARN_ON(bio->bi_next);
- bio->bi_next = NULL;
- bio->bi_rw |= rw;
-@@ -2171,6 +2182,11 @@ int schedule_bio(struct btrfs_root *root
- if (should_queue)
- btrfs_queue_worker(&root->fs_info->submit_workers,
- &device->work);
-+
-+ limit = btrfs_async_submit_limit(root->fs_info);
-+ wait_event_timeout(root->fs_info->async_submit_wait,
-+ (atomic_read(&root->fs_info->nr_async_bios) < limit),
-+ HZ/10);
- return 0;
- }
-
diff --git a/sys-fs/btrfs/files/btrfs-0.16-new-kernels.patch b/sys-fs/btrfs/files/btrfs-0.16-new-kernels.patch
deleted file mode 100644
index bc93756c7730..000000000000
--- a/sys-fs/btrfs/files/btrfs-0.16-new-kernels.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-diff -Nurp a/compat.h ./compat.h
---- a/compat.h 2008-08-05 12:13:37.000000000 -0600
-+++ b/compat.h 2008-08-18 10:59:06.974647262 -0600
-@@ -1,6 +1,9 @@
- #ifndef _COMPAT_H_
- #define _COMPAT_H_
-
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,26)
-+#define trylock_page(page) (!TestSetPageLocked(page))
-+#endif
-
- /*
- * Even if AppArmor isn't enabled, it still has different prototypes.
-diff -Nurp a/ctree.h ./ctree.h
---- a/ctree.h 2008-08-05 12:13:37.000000000 -0600
-+++ b/ctree.h 2008-08-18 10:59:07.004646324 -0600
-@@ -1648,7 +1648,7 @@ int btrfs_csum_truncate(struct btrfs_tra
- /* inode.c */
-
- /* RHEL and EL kernels have a patch that renames PG_checked to FsMisc */
--#ifdef ClearPageFsMisc
-+#if defined(ClearPageFsMisc) && !defined(ClearPageChecked)
- #define ClearPageChecked ClearPageFsMisc
- #define SetPageChecked SetPageFsMisc
- #define PageChecked PageFsMisc
-diff -Nurp a/extent_io.c ./extent_io.c
---- a/extent_io.c 2008-08-05 12:13:37.000000000 -0600
-+++ b/extent_io.c 2008-08-18 10:59:07.044650492 -0600
-@@ -14,6 +14,7 @@
- #include <linux/pagevec.h>
- #include "extent_io.h"
- #include "extent_map.h"
-+#include "compat.h"
-
- /* temporary define until extent_map moves out of btrfs */
- struct kmem_cache *btrfs_cache_create(const char *name, size_t size,
-@@ -3055,7 +3056,7 @@ int read_extent_buffer_pages(struct exte
- for (i = start_i; i < num_pages; i++) {
- page = extent_buffer_page(eb, i);
- if (!wait) {
-- if (TestSetPageLocked(page))
-+ if (!trylock_page(page))
- goto unlock_exit;
- } else {
- lock_page(page);