summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Peterson <lavajoe@gentoo.org>2008-07-28 01:37:59 +0000
committerJoe Peterson <lavajoe@gentoo.org>2008-07-28 01:37:59 +0000
commitae9292c72a7665c44c356742d565a3aaaa26d2fc (patch)
treeea495d41fe9db11167c458a7b7c63a0f37da1e35 /sys-fs/btrfs
parentinitial commit of mkgmap (diff)
downloadgentoo-2-ae9292c72a7665c44c356742d565a3aaaa26d2fc.tar.gz
gentoo-2-ae9292c72a7665c44c356742d565a3aaaa26d2fc.tar.bz2
gentoo-2-ae9292c72a7665c44c356742d565a3aaaa26d2fc.zip
Remove unneeded dependencies on btrfs-progs and e2fsprogs; remove old versions
(Portage version: 2.1.4.4)
Diffstat (limited to 'sys-fs/btrfs')
-rw-r--r--sys-fs/btrfs/ChangeLog8
-rw-r--r--sys-fs/btrfs/btrfs-0.14.ebuild59
-rw-r--r--sys-fs/btrfs/btrfs-0.15-r1.ebuild62
-rw-r--r--sys-fs/btrfs/btrfs-0.15-r2.ebuild9
-rw-r--r--sys-fs/btrfs/btrfs-0.15.ebuild60
-rw-r--r--sys-fs/btrfs/btrfs-9999.ebuild9
-rw-r--r--sys-fs/btrfs/files/btrfs-0.14-hotfix.patch465
7 files changed, 15 insertions, 657 deletions
diff --git a/sys-fs/btrfs/ChangeLog b/sys-fs/btrfs/ChangeLog
index 66b686ac4879..64bfbe7fca98 100644
--- a/sys-fs/btrfs/ChangeLog
+++ b/sys-fs/btrfs/ChangeLog
@@ -1,6 +1,12 @@
# 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.8 2008/06/14 20:28:21 swegener Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-fs/btrfs/ChangeLog,v 1.9 2008/07/28 01:37:59 lavajoe Exp $
+
+ 28 Jul 2008; Joe Peterson <lavajoe@gentoo.org>
+ -files/btrfs-0.14-hotfix.patch, -btrfs-0.14.ebuild, -btrfs-0.15.ebuild,
+ -btrfs-0.15-r1.ebuild, btrfs-0.15-r2.ebuild, btrfs-9999.ebuild:
+ Remove unneeded dependencies on btrfs-progs and e2fsprogs; remove old
+ versions
14 Jun 2008; Sven Wegener <swegener@gentoo.org> btrfs-0.14.ebuild,
btrfs-0.15.ebuild, btrfs-0.15-r1.ebuild, btrfs-0.15-r2.ebuild,
diff --git a/sys-fs/btrfs/btrfs-0.14.ebuild b/sys-fs/btrfs/btrfs-0.14.ebuild
deleted file mode 100644
index 52d7224c3b37..000000000000
--- a/sys-fs/btrfs/btrfs-0.14.ebuild
+++ /dev/null
@@ -1,59 +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.14.ebuild,v 1.4 2008/06/14 20:28:21 swegener 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="sys-fs/e2fsprogs"
-RDEPEND="${DEPEND}"
-PDEPEND="~sys-fs/btrfs-progs-${PV}"
-
-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}/${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."
-}
diff --git a/sys-fs/btrfs/btrfs-0.15-r1.ebuild b/sys-fs/btrfs/btrfs-0.15-r1.ebuild
deleted file mode 100644
index 84bbef0bc4df..000000000000
--- a/sys-fs/btrfs/btrfs-0.15-r1.ebuild
+++ /dev/null
@@ -1,62 +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-r1.ebuild,v 1.3 2008/06/14 20:28:21 swegener 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="sys-fs/e2fsprogs"
-RDEPEND="${DEPEND}"
-PDEPEND="~sys-fs/btrfs-progs-${PV}"
-
-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}/${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 "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.15-r2.ebuild b/sys-fs/btrfs/btrfs-0.15-r2.ebuild
index abc37da410c3..fc15df65c6e4 100644
--- a/sys-fs/btrfs/btrfs-0.15-r2.ebuild
+++ b/sys-fs/btrfs/btrfs-0.15-r2.ebuild
@@ -1,6 +1,6 @@
# 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.2 2008/06/14 20:28:21 swegener Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-fs/btrfs/btrfs-0.15-r2.ebuild,v 1.3 2008/07/28 01:37:59 lavajoe Exp $
inherit eutils linux-mod
@@ -13,10 +13,6 @@ SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE=""
-DEPEND="sys-fs/e2fsprogs"
-RDEPEND="${DEPEND}"
-PDEPEND="~sys-fs/btrfs-progs-${PV}"
-
pkg_setup()
{
linux-mod_pkg_setup
@@ -58,6 +54,9 @@ pkg_postinst() {
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.15.ebuild b/sys-fs/btrfs/btrfs-0.15.ebuild
deleted file mode 100644
index cf8fc0a0eb75..000000000000
--- a/sys-fs/btrfs/btrfs-0.15.ebuild
+++ /dev/null
@@ -1,60 +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.ebuild,v 1.3 2008/06/14 20:28:21 swegener 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="sys-fs/e2fsprogs"
-RDEPEND="${DEPEND}"
-PDEPEND="~sys-fs/btrfs-progs-${PV}"
-
-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}"
-}
-
-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 "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-9999.ebuild b/sys-fs/btrfs/btrfs-9999.ebuild
index d0dc606bccaf..9f90c5bc18d3 100644
--- a/sys-fs/btrfs/btrfs-9999.ebuild
+++ b/sys-fs/btrfs/btrfs-9999.ebuild
@@ -1,6 +1,6 @@
# 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-9999.ebuild,v 1.3 2008/06/14 20:28:21 swegener Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-fs/btrfs/btrfs-9999.ebuild,v 1.4 2008/07/28 01:37:59 lavajoe Exp $
inherit eutils linux-mod mercurial
@@ -13,10 +13,6 @@ SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE=""
-DEPEND="sys-fs/e2fsprogs"
-RDEPEND="${DEPEND}"
-PDEPEND="~sys-fs/btrfs-progs-${PV}"
-
S="${WORKDIR}/kernel-unstable"
pkg_setup()
@@ -56,6 +52,9 @@ pkg_postinst() {
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: This version is installed from a live ebuild, so the disk"
ewarn " format can change from install to install as the upstream"
ewarn " source changes."
diff --git a/sys-fs/btrfs/files/btrfs-0.14-hotfix.patch b/sys-fs/btrfs/files/btrfs-0.14-hotfix.patch
deleted file mode 100644
index 58e9ec197543..000000000000
--- a/sys-fs/btrfs/files/btrfs-0.14-hotfix.patch
+++ /dev/null
@@ -1,465 +0,0 @@
-diff -Nur btrfs-0.14/.hg_archival.txt kernel-f6ba18a50ad7/.hg_archival.txt
---- btrfs-0.14/.hg_archival.txt 2008-04-29 12:28:55.000000000 -0600
-+++ kernel-f6ba18a50ad7/.hg_archival.txt 2008-05-02 14:13:49.000000000 -0600
-@@ -1,2 +1,2 @@
- repo: 972e56533d49456b288abe364ba0295fa8c0e0ad
--node: c9b946757d2354bed791012e3a924ccac9bf5d38
-+node: f6ba18a50ad79a1387c86c055d9a411c82b10e80
-diff -Nur btrfs-0.14/compat.h kernel-f6ba18a50ad7/compat.h
---- btrfs-0.14/compat.h 1969-12-31 17:00:00.000000000 -0700
-+++ kernel-f6ba18a50ad7/compat.h 2008-05-02 14:13:49.000000000 -0600
-@@ -0,0 +1,25 @@
-+#ifndef _COMPAT_H_
-+#define _COMPAT_H_
-+
-+
-+/*
-+ * Even if AppArmor isn't enabled, it still has different prototypes.
-+ * Add more distro/version pairs here to declare which has AppArmor applied.
-+ */
-+#if defined(CONFIG_SUSE_KERNEL)
-+# if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
-+# define REMOVE_SUID_PATH 1
-+# endif
-+#endif
-+
-+/*
-+ * catch any other distros that have patched in apparmor. This isn't
-+ * 100% reliable because it won't catch people that hand compile their
-+ * own distro kernels without apparmor compiled in. But, it is better
-+ * than nothing.
-+ */
-+#ifdef CONFIG_SECURITY_APPARMOR
-+# define REMOVE_SUID_PATH 1
-+#endif
-+
-+#endif /* _COMPAT_H_ */
-diff -Nur btrfs-0.14/ctree.h kernel-f6ba18a50ad7/ctree.h
---- btrfs-0.14/ctree.h 2008-04-29 12:28:55.000000000 -0600
-+++ kernel-f6ba18a50ad7/ctree.h 2008-05-02 14:13:49.000000000 -0600
-@@ -1516,9 +1516,9 @@
- /* file-item.c */
- int btrfs_insert_file_extent(struct btrfs_trans_handle *trans,
- struct btrfs_root *root,
-- u64 objectid, u64 pos, u64 offset,
-+ u64 objectid, u64 pos, u64 disk_offset,
- u64 disk_num_bytes,
-- u64 num_bytes);
-+ u64 num_bytes, u64 offset);
- int btrfs_lookup_file_extent(struct btrfs_trans_handle *trans,
- struct btrfs_root *root,
- struct btrfs_path *path, u64 objectid,
-diff -Nur btrfs-0.14/disk-io.c kernel-f6ba18a50ad7/disk-io.c
---- btrfs-0.14/disk-io.c 2008-04-29 12:28:55.000000000 -0600
-+++ kernel-f6ba18a50ad7/disk-io.c 2008-05-02 14:13:49.000000000 -0600
-@@ -1548,6 +1548,7 @@
- btrfs_commit_transaction(trans, root);
- ret = btrfs_write_and_wait_transaction(NULL, root);
- BUG_ON(ret);
-+
- write_ctree_super(NULL, root);
- mutex_unlock(&fs_info->fs_mutex);
-
-@@ -1583,17 +1584,17 @@
- extent_io_tree_empty_lru(&fs_info->extent_ins);
- extent_io_tree_empty_lru(&BTRFS_I(fs_info->btree_inode)->io_tree);
-
-- flush_workqueue(end_io_workqueue);
- flush_workqueue(async_submit_workqueue);
-+ flush_workqueue(end_io_workqueue);
-
- truncate_inode_pages(fs_info->btree_inode->i_mapping, 0);
-
-- flush_workqueue(end_io_workqueue);
-- destroy_workqueue(end_io_workqueue);
--
- flush_workqueue(async_submit_workqueue);
- destroy_workqueue(async_submit_workqueue);
-
-+ flush_workqueue(end_io_workqueue);
-+ destroy_workqueue(end_io_workqueue);
-+
- iput(fs_info->btree_inode);
- #if 0
- while(!list_empty(&fs_info->hashers)) {
-@@ -1663,8 +1664,21 @@
-
- void btrfs_btree_balance_dirty(struct btrfs_root *root, unsigned long nr)
- {
-- balance_dirty_pages_ratelimited_nr(
-+ struct extent_io_tree *tree;
-+ u64 num_dirty;
-+ u64 start = 0;
-+ unsigned long thresh = 16 * 1024 * 1024;
-+ tree = &BTRFS_I(root->fs_info->btree_inode)->io_tree;
-+
-+ if (current_is_pdflush())
-+ return;
-+
-+ num_dirty = count_range_bits(tree, &start, (u64)-1,
-+ thresh, EXTENT_DIRTY);
-+ if (num_dirty > thresh) {
-+ balance_dirty_pages_ratelimited_nr(
- root->fs_info->btree_inode->i_mapping, 1);
-+ }
- }
-
- void btrfs_set_buffer_defrag(struct extent_buffer *buf)
-diff -Nur btrfs-0.14/file-item.c kernel-f6ba18a50ad7/file-item.c
---- btrfs-0.14/file-item.c 2008-04-29 12:28:55.000000000 -0600
-+++ kernel-f6ba18a50ad7/file-item.c 2008-05-02 14:13:49.000000000 -0600
-@@ -28,10 +28,10 @@
- sizeof(struct btrfs_item) * 2) / \
- BTRFS_CRC32_SIZE) - 1))
- int btrfs_insert_file_extent(struct btrfs_trans_handle *trans,
-- struct btrfs_root *root,
-- u64 objectid, u64 pos,
-- u64 offset, u64 disk_num_bytes,
-- u64 num_bytes)
-+ struct btrfs_root *root,
-+ u64 objectid, u64 pos,
-+ u64 disk_offset, u64 disk_num_bytes,
-+ u64 num_bytes, u64 offset)
- {
- int ret = 0;
- struct btrfs_file_extent_item *item;
-@@ -53,9 +53,9 @@
- leaf = path->nodes[0];
- item = btrfs_item_ptr(leaf, path->slots[0],
- struct btrfs_file_extent_item);
-- btrfs_set_file_extent_disk_bytenr(leaf, item, offset);
-+ btrfs_set_file_extent_disk_bytenr(leaf, item, disk_offset);
- btrfs_set_file_extent_disk_num_bytes(leaf, item, disk_num_bytes);
-- btrfs_set_file_extent_offset(leaf, item, 0);
-+ btrfs_set_file_extent_offset(leaf, item, offset);
- btrfs_set_file_extent_num_bytes(leaf, item, num_bytes);
- btrfs_set_file_extent_generation(leaf, item, trans->transid);
- btrfs_set_file_extent_type(leaf, item, BTRFS_FILE_EXTENT_REG);
-diff -Nur btrfs-0.14/file.c kernel-f6ba18a50ad7/file.c
---- btrfs-0.14/file.c 2008-04-29 12:28:55.000000000 -0600
-+++ kernel-f6ba18a50ad7/file.c 2008-05-02 14:13:49.000000000 -0600
-@@ -37,6 +37,7 @@
- #include "ordered-data.h"
- #include "ioctl.h"
- #include "print-tree.h"
-+#include "compat.h"
-
-
- static int btrfs_copy_from_user(loff_t pos, int num_pages, int write_bytes,
-@@ -285,7 +286,7 @@
- err = btrfs_insert_file_extent(trans, root,
- inode->i_ino,
- last_pos_in_file,
-- 0, 0, hole_size);
-+ 0, 0, hole_size, 0);
- btrfs_drop_extent_cache(inode, last_pos_in_file,
- last_pos_in_file + hole_size -1);
- btrfs_check_file(root, inode);
-@@ -852,7 +853,11 @@
- goto out_nolock;
- if (count == 0)
- goto out_nolock;
-+#ifdef REMOVE_SUID_PATH
-+ err = remove_suid(&file->f_path);
-+#else
- err = remove_suid(fdentry(file));
-+#endif
- if (err)
- goto out_nolock;
- file_update_time(file);
-@@ -961,7 +966,7 @@
- if (err < 0)
- num_written = err;
- } else if (num_written > 0 && (file->f_flags & O_DIRECT)) {
--#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
- do_sync_file_range(file, start_pos,
- start_pos + num_written - 1,
- SYNC_FILE_RANGE_WRITE |
-diff -Nur btrfs-0.14/inode.c kernel-f6ba18a50ad7/inode.c
---- btrfs-0.14/inode.c 2008-04-29 12:28:55.000000000 -0600
-+++ kernel-f6ba18a50ad7/inode.c 2008-05-02 14:13:49.000000000 -0600
-@@ -19,6 +19,7 @@
- #include <linux/kernel.h>
- #include <linux/bio.h>
- #include <linux/buffer_head.h>
-+#include <linux/file.h>
- #include <linux/fs.h>
- #include <linux/pagemap.h>
- #include <linux/highmem.h>
-@@ -141,7 +142,7 @@
- cur_alloc_size = ins.offset;
- ret = btrfs_insert_file_extent(trans, root, inode->i_ino,
- start, ins.objectid, ins.offset,
-- ins.offset);
-+ ins.offset, 0);
- inode->i_blocks += ins.offset >> 9;
- btrfs_check_file(root, inode);
- if (num_bytes < cur_alloc_size) {
-@@ -1227,7 +1228,7 @@
- err = btrfs_insert_file_extent(trans, root,
- inode->i_ino,
- hole_start, 0, 0,
-- hole_size);
-+ hole_size, 0);
- btrfs_drop_extent_cache(inode, hole_start,
- (u64)-1);
- btrfs_check_file(root, inode);
-@@ -2034,12 +2035,12 @@
-
- static int btrfs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
- {
-- struct inode *inode;
-+ struct inode *inode = NULL;
- struct btrfs_trans_handle *trans;
- struct btrfs_root *root = BTRFS_I(dir)->root;
- int err = 0;
- int drop_on_err = 0;
-- u64 objectid;
-+ u64 objectid = 0;
- unsigned long nr = 1;
-
- mutex_lock(&root->fs_info->fs_mutex);
-@@ -3100,6 +3101,170 @@
- return ret;
- }
-
-+void dup_item_to_inode(struct btrfs_trans_handle *trans,
-+ struct btrfs_root *root,
-+ struct btrfs_path *path,
-+ struct extent_buffer *leaf,
-+ int slot,
-+ struct btrfs_key *key,
-+ u64 destino)
-+{
-+ struct btrfs_path *cpath = btrfs_alloc_path();
-+ int len = btrfs_item_size_nr(leaf, slot);
-+ int dstoff;
-+ struct btrfs_key ckey = *key;
-+ int ret;
-+
-+ ckey.objectid = destino;
-+ ret = btrfs_insert_empty_item(trans, root, cpath, &ckey, len);
-+ dstoff = btrfs_item_ptr_offset(cpath->nodes[0], cpath->slots[0]);
-+ copy_extent_buffer(cpath->nodes[0], leaf, dstoff,
-+ btrfs_item_ptr_offset(leaf, slot),
-+ len);
-+ btrfs_release_path(root, cpath);
-+}
-+
-+long btrfs_ioctl_clone(struct file *file, unsigned long src_fd)
-+{
-+ struct inode *inode = fdentry(file)->d_inode;
-+ struct btrfs_root *root = BTRFS_I(inode)->root;
-+ struct file *src_file;
-+ struct inode *src;
-+ struct btrfs_trans_handle *trans;
-+ int ret;
-+ u64 pos;
-+ struct btrfs_path *path;
-+ struct btrfs_key key;
-+ struct extent_buffer *leaf;
-+ u32 nritems;
-+ int nextret;
-+ int slot;
-+
-+ src_file = fget(src_fd);
-+ if (!src_file)
-+ return -EBADF;
-+ src = src_file->f_dentry->d_inode;
-+
-+ ret = -EXDEV;
-+ if (src->i_sb != inode->i_sb)
-+ goto out_fput;
-+
-+ if (inode < src) {
-+ mutex_lock(&inode->i_mutex);
-+ mutex_lock(&src->i_mutex);
-+ } else {
-+ mutex_lock(&src->i_mutex);
-+ mutex_lock(&inode->i_mutex);
-+ }
-+
-+ ret = -ENOTEMPTY;
-+ if (inode->i_size)
-+ goto out_unlock;
-+
-+ /* do any pending delalloc/csum calc on src, one way or
-+ another, and lock file content */
-+ while (1) {
-+ filemap_write_and_wait(src->i_mapping);
-+ lock_extent(&BTRFS_I(src)->io_tree, 0, (u64)-1, GFP_NOFS);
-+ if (BTRFS_I(src)->delalloc_bytes == 0)
-+ break;
-+ unlock_extent(&BTRFS_I(src)->io_tree, 0, (u64)-1, GFP_NOFS);
-+ }
-+
-+ mutex_lock(&root->fs_info->fs_mutex);
-+ trans = btrfs_start_transaction(root, 0);
-+ path = btrfs_alloc_path();
-+ pos = 0;
-+ while (1) {
-+ ret = btrfs_lookup_file_extent(trans, root, path, src->i_ino,
-+ pos, 0);
-+ if (ret < 0)
-+ goto out;
-+ if (ret > 0) {
-+ if (path->slots[0] == 0) {
-+ ret = 0;
-+ goto out;
-+ }
-+ path->slots[0]--;
-+ }
-+next_slot:
-+ leaf = path->nodes[0];
-+ slot = path->slots[0];
-+ btrfs_item_key_to_cpu(leaf, &key, slot);
-+ nritems = btrfs_header_nritems(leaf);
-+
-+ if (btrfs_key_type(&key) > BTRFS_CSUM_ITEM_KEY ||
-+ key.objectid != src->i_ino)
-+ goto out;
-+ if (btrfs_key_type(&key) == BTRFS_EXTENT_DATA_KEY) {
-+ struct btrfs_file_extent_item *extent;
-+ int found_type;
-+ pos = key.offset;
-+ extent = btrfs_item_ptr(leaf, slot,
-+ struct btrfs_file_extent_item);
-+ found_type = btrfs_file_extent_type(leaf, extent);
-+ if (found_type == BTRFS_FILE_EXTENT_REG) {
-+ u64 len = btrfs_file_extent_num_bytes(leaf,
-+ extent);
-+ u64 ds = btrfs_file_extent_disk_bytenr(leaf,
-+ extent);
-+ u64 dl = btrfs_file_extent_disk_num_bytes(leaf,
-+ extent);
-+ u64 off = btrfs_file_extent_offset(leaf,
-+ extent);
-+ btrfs_insert_file_extent(trans, root,
-+ inode->i_ino, pos,
-+ ds, dl, len, off);
-+ /* ds == 0 means there's a hole */
-+ if (ds != 0) {
-+ btrfs_inc_extent_ref(trans, root,
-+ ds, dl,
-+ root->root_key.objectid,
-+ trans->transid,
-+ inode->i_ino, pos);
-+ }
-+ pos = key.offset + len;
-+ } else if (found_type == BTRFS_FILE_EXTENT_INLINE) {
-+ dup_item_to_inode(trans, root, path, leaf, slot,
-+ &key, inode->i_ino);
-+ pos = key.offset + btrfs_item_size_nr(leaf,
-+ slot);
-+ }
-+ } else if (btrfs_key_type(&key) == BTRFS_CSUM_ITEM_KEY)
-+ dup_item_to_inode(trans, root, path, leaf, slot, &key,
-+ inode->i_ino);
-+
-+ if (slot >= nritems - 1) {
-+ nextret = btrfs_next_leaf(root, path);
-+ if (nextret)
-+ goto out;
-+ } else {
-+ path->slots[0]++;
-+ }
-+ goto next_slot;
-+ }
-+
-+out:
-+ btrfs_free_path(path);
-+ ret = 0;
-+
-+ inode->i_blocks = src->i_blocks;
-+ i_size_write(inode, src->i_size);
-+ btrfs_update_inode(trans, root, inode);
-+
-+ unlock_extent(&BTRFS_I(src)->io_tree, 0, (u64)-1, GFP_NOFS);
-+
-+ btrfs_end_transaction(trans, root);
-+ mutex_unlock(&root->fs_info->fs_mutex);
-+
-+out_unlock:
-+ mutex_unlock(&src->i_mutex);
-+ mutex_unlock(&inode->i_mutex);
-+out_fput:
-+ fput(src_file);
-+ return ret;
-+}
-+
- long btrfs_ioctl(struct file *file, unsigned int
- cmd, unsigned long arg)
- {
-@@ -3116,6 +3281,8 @@
- return btrfs_ioctl_add_dev(root, (void __user *)arg);
- case BTRFS_IOC_BALANCE:
- return btrfs_balance(root->fs_info->dev_root);
-+ case BTRFS_IOC_CLONE:
-+ return btrfs_ioctl_clone(file, arg);
- }
-
- return -ENOTTY;
-diff -Nur btrfs-0.14/ioctl.h kernel-f6ba18a50ad7/ioctl.h
---- btrfs-0.14/ioctl.h 2008-04-29 12:28:55.000000000 -0600
-+++ kernel-f6ba18a50ad7/ioctl.h 2008-05-02 14:13:49.000000000 -0600
-@@ -36,6 +36,7 @@
- struct btrfs_ioctl_vol_args)
- #define BTRFS_IOC_SCAN_DEV _IOW(BTRFS_IOCTL_MAGIC, 4, \
- struct btrfs_ioctl_vol_args)
-+#define BTRFS_IOC_CLONE _IOW(BTRFS_IOCTL_MAGIC, 9, int)
- #define BTRFS_IOC_ADD_DEV _IOW(BTRFS_IOCTL_MAGIC, 10, \
- struct btrfs_ioctl_vol_args)
- #define BTRFS_IOC_RM_DEV _IOW(BTRFS_IOCTL_MAGIC, 11, \
-diff -Nur btrfs-0.14/ordered-data.c kernel-f6ba18a50ad7/ordered-data.c
---- btrfs-0.14/ordered-data.c 2008-04-29 12:28:55.000000000 -0600
-+++ kernel-f6ba18a50ad7/ordered-data.c 2008-05-02 14:13:49.000000000 -0600
-@@ -18,6 +18,7 @@
-
- #include <linux/gfp.h>
- #include <linux/slab.h>
-+#include <linux/blkdev.h>
- #include "ctree.h"
- #include "transaction.h"
- #include "btrfs_inode.h"
-diff -Nur btrfs-0.14/transaction.c kernel-f6ba18a50ad7/transaction.c
---- btrfs-0.14/transaction.c 2008-04-29 12:28:55.000000000 -0600
-+++ kernel-f6ba18a50ad7/transaction.c 2008-05-02 14:13:49.000000000 -0600
-@@ -814,6 +814,9 @@
- int ret;
-
- mutex_lock(&root->fs_info->fs_mutex);
-+ if (root->fs_info->closing)
-+ goto out;
-+
- mutex_lock(&root->fs_info->trans_mutex);
- cur = root->fs_info->running_transaction;
- if (!cur) {
-@@ -838,12 +841,13 @@
-
- void btrfs_transaction_queue_work(struct btrfs_root *root, int delay)
- {
-- queue_delayed_work(trans_wq, &root->fs_info->trans_work, delay);
-+ if (!root->fs_info->closing)
-+ queue_delayed_work(trans_wq, &root->fs_info->trans_work, delay);
- }
-
- void btrfs_transaction_flush_work(struct btrfs_root *root)
- {
-- cancel_rearming_delayed_workqueue(trans_wq, &root->fs_info->trans_work);
-+ cancel_delayed_work(&root->fs_info->trans_work);
- flush_workqueue(trans_wq);
- }
-
-diff -Nur btrfs-0.14/volumes.c kernel-f6ba18a50ad7/volumes.c
---- btrfs-0.14/volumes.c 2008-04-29 12:28:55.000000000 -0600
-+++ kernel-f6ba18a50ad7/volumes.c 2008-05-02 14:13:49.000000000 -0600
-@@ -547,7 +547,7 @@
- struct extent_buffer *leaf;
- struct btrfs_key key;
- unsigned long ptr;
-- u64 free_devid;
-+ u64 free_devid = 0;
-
- root = root->fs_info->chunk_root;
-