summaryrefslogtreecommitdiff
path: root/sys-fs
diff options
context:
space:
mode:
authorSergei Trofimovich <slyfox@gentoo.org>2013-11-30 20:55:15 +0000
committerSergei Trofimovich <slyfox@gentoo.org>2013-11-30 20:55:15 +0000
commit08aed22cad0c96c8bd81e160ac1152026276042c (patch)
tree024a79266339b4be3418483fc81e27828a829c44 /sys-fs
parentPort to KDE_HANDBOOK wrt bug #492862. (diff)
downloadgentoo-2-08aed22cad0c96c8bd81e160ac1152026276042c.tar.gz
gentoo-2-08aed22cad0c96c8bd81e160ac1152026276042c.tar.bz2
gentoo-2-08aed22cad0c96c8bd81e160ac1152026276042c.zip
Fix 'btrfs send' on funky subvol paths (bug #492776 by Thomas Scheiblauer).
(Portage version: 2.2.7_p18/cvs/Linux x86_64, signed Manifest commit with key 611FF3AA)
Diffstat (limited to 'sys-fs')
-rw-r--r--sys-fs/btrfs-progs/ChangeLog9
-rw-r--r--sys-fs/btrfs-progs/btrfs-progs-3.12-r1.ebuild58
-rw-r--r--sys-fs/btrfs-progs/btrfs-progs-9999.ebuild3
-rw-r--r--sys-fs/btrfs-progs/files/btrfs-progs-3.12-fix-send-subvol-492776.patch111
4 files changed, 179 insertions, 2 deletions
diff --git a/sys-fs/btrfs-progs/ChangeLog b/sys-fs/btrfs-progs/ChangeLog
index 6e4a8de59a0e..0b04b15607c6 100644
--- a/sys-fs/btrfs-progs/ChangeLog
+++ b/sys-fs/btrfs-progs/ChangeLog
@@ -1,6 +1,13 @@
# ChangeLog for sys-fs/btrfs-progs
# Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/sys-fs/btrfs-progs/ChangeLog,v 1.68 2013/11/30 08:40:40 slyfox Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-fs/btrfs-progs/ChangeLog,v 1.69 2013/11/30 20:55:15 slyfox Exp $
+
+*btrfs-progs-3.12-r1 (30 Nov 2013)
+
+ 30 Nov 2013; Sergei Trofimovich <slyfox@gentoo.org>
+ +btrfs-progs-3.12-r1.ebuild,
+ +files/btrfs-progs-3.12-fix-send-subvol-492776.patch, btrfs-progs-9999.ebuild:
+ Fix 'btrfs send' on funky subvol paths (bug #492776 by Thomas Scheiblauer).
30 Nov 2013; Sergei Trofimovich <slyfox@gentoo.org> btrfs-progs-3.12.ebuild,
btrfs-progs-9999.ebuild:
diff --git a/sys-fs/btrfs-progs/btrfs-progs-3.12-r1.ebuild b/sys-fs/btrfs-progs/btrfs-progs-3.12-r1.ebuild
new file mode 100644
index 000000000000..2c2a9072aa3d
--- /dev/null
+++ b/sys-fs/btrfs-progs/btrfs-progs-3.12-r1.ebuild
@@ -0,0 +1,58 @@
+# Copyright 1999-2013 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/sys-fs/btrfs-progs/btrfs-progs-3.12-r1.ebuild,v 1.1 2013/11/30 20:55:15 slyfox Exp $
+
+EAPI=5
+
+inherit eutils multilib toolchain-funcs
+
+libbtrfs_soname=0
+
+if [[ ${PV} != 9999 ]]; then
+ MY_PV=v${PV}
+ KEYWORDS="~alpha ~amd64 ~arm ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86"
+ SRC_URI="https://www.kernel.org/pub/linux/kernel/people/mason/${PN}/${PN}-${MY_PV}.tar.xz"
+ S="${WORKDIR}"/${PN}-${MY_PV}
+else
+ inherit git-2
+ EGIT_REPO_URI="git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-progs.git
+ https://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-progs.git"
+fi
+
+DESCRIPTION="Btrfs filesystem utilities"
+HOMEPAGE="https://btrfs.wiki.kernel.org"
+
+LICENSE="GPL-2"
+SLOT="0/${libbtrfs_soname}"
+IUSE=""
+
+DEPEND="
+ dev-libs/lzo
+ sys-libs/zlib
+ sys-apps/acl
+ sys-fs/e2fsprogs
+"
+RDEPEND="${DEPEND}"
+
+src_prepare() {
+ epatch "${FILESDIR}"/${P}-fix-send-subvol-492776.patch
+ epatch_user
+}
+
+src_compile() {
+ emake \
+ AR="$(tc-getAR)" \
+ CC="$(tc-getCC)" \
+ CFLAGS="${CFLAGS}" \
+ LDFLAGS="${LDFLAGS}" \
+ BUILD_VERBOSE=1
+}
+
+src_install() {
+ emake install \
+ DESTDIR="${D}" \
+ prefix=/usr \
+ bindir=/sbin \
+ libdir=/usr/$(get_libdir) \
+ mandir=/usr/share/man
+}
diff --git a/sys-fs/btrfs-progs/btrfs-progs-9999.ebuild b/sys-fs/btrfs-progs/btrfs-progs-9999.ebuild
index 1c898b835cfe..9b6c844193d9 100644
--- a/sys-fs/btrfs-progs/btrfs-progs-9999.ebuild
+++ b/sys-fs/btrfs-progs/btrfs-progs-9999.ebuild
@@ -1,6 +1,6 @@
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-fs/btrfs-progs/btrfs-progs-9999.ebuild,v 1.30 2013/11/30 08:40:40 slyfox Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-fs/btrfs-progs/btrfs-progs-9999.ebuild,v 1.31 2013/11/30 20:55:15 slyfox Exp $
EAPI=5
@@ -35,6 +35,7 @@ DEPEND="
RDEPEND="${DEPEND}"
src_prepare() {
+ epatch "${FILESDIR}"/${PN}-3.12-fix-send-subvol-492776.patch
epatch_user
}
diff --git a/sys-fs/btrfs-progs/files/btrfs-progs-3.12-fix-send-subvol-492776.patch b/sys-fs/btrfs-progs/files/btrfs-progs-3.12-fix-send-subvol-492776.patch
new file mode 100644
index 000000000000..8a2cc7883a14
--- /dev/null
+++ b/sys-fs/btrfs-progs/files/btrfs-progs-3.12-fix-send-subvol-492776.patch
@@ -0,0 +1,111 @@
+Gentoo-bug: http://bugs.gentoo.org/492776
+
+From: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
+
+Steps to reproduce:
+ # mkfs.btrfs -f /dev/sda
+ # mount /dev/sda /mnt
+ # btrfs subvolume create /mnt/foo
+ # umount /mnt
+ # mount -o subvol=foo /dev/sda /mnt
+ # btrfs sub snapshot -r /mnt /mnt/snap
+ # btrfs send /mnt/snap > /dev/null
+
+We will fail to send '/mnt/snap',this is because btrfs send try to
+open '/mnt/snap' by btrfs internal subvolume path 'foo/snap' rather
+than relative path based on mounted point, this will return us 'no
+such file or directory',this is not right, fix it.
+
+Reported-by: Thomas Scheiblauer <tom@sharkbay.at>
+Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
+---
+v1->v2:
+ code cleanups(thanks to Stefan)
+---
+ cmds-send.c | 34 ++++++----------------------------
+ 1 file changed, 6 insertions(+), 28 deletions(-)
+
+diff --git a/cmds-send.c b/cmds-send.c
+index 53e9a53..6fdfd7f 100644
+--- a/cmds-send.c
++++ b/cmds-send.c
+@@ -282,31 +282,21 @@ out:
+ return ERR_PTR(ret);
+ }
+
+-static int do_send(struct btrfs_send *send, u64 root_id, u64 parent_root_id,
+- int is_first_subvol, int is_last_subvol)
++static int do_send(struct btrfs_send *send, u64 parent_root_id,
++ int is_first_subvol, int is_last_subvol, char *subvol)
+ {
+ int ret;
+ pthread_t t_read;
+ pthread_attr_t t_attr;
+ struct btrfs_ioctl_send_args io_send;
+- struct subvol_info *si;
+ void *t_err = NULL;
+ int subvol_fd = -1;
+ int pipefd[2] = {-1, -1};
+
+- si = subvol_uuid_search(&send->sus, root_id, NULL, 0, NULL,
+- subvol_search_by_root_id);
+- if (!si) {
+- ret = -ENOENT;
+- fprintf(stderr, "ERROR: could not find subvol info for %llu",
+- root_id);
+- goto out;
+- }
+-
+- subvol_fd = openat(send->mnt_fd, si->path, O_RDONLY | O_NOATIME);
++ subvol_fd = openat(send->mnt_fd, subvol, O_RDONLY | O_NOATIME);
+ if (subvol_fd < 0) {
+ ret = -errno;
+- fprintf(stderr, "ERROR: open %s failed. %s\n", si->path,
++ fprintf(stderr, "ERROR: open %s failed. %s\n", subvol,
+ strerror(-ret));
+ goto out;
+ }
+@@ -385,10 +375,6 @@ out:
+ close(pipefd[0]);
+ if (pipefd[1] != -1)
+ close(pipefd[1]);
+- if (si) {
+- free(si->path);
+- free(si);
+- }
+ return ret;
+ }
+
+@@ -664,14 +650,6 @@ int cmd_send(int argc, char **argv)
+ goto out;
+ }
+
+- ret = get_root_id(&send, get_subvol_name(send.root_path, subvol),
+- &root_id);
+- if (ret < 0) {
+- fprintf(stderr, "ERROR: could not resolve root_id "
+- "for %s\n", subvol);
+- goto out;
+- }
+-
+ if (!full_send && !parent_root_id) {
+ ret = find_good_parent(&send, root_id, &parent_root_id);
+ if (ret < 0) {
+@@ -700,8 +678,8 @@ int cmd_send(int argc, char **argv)
+ is_first_subvol = 1;
+ is_last_subvol = 1;
+ }
+- ret = do_send(&send, root_id, parent_root_id,
+- is_first_subvol, is_last_subvol);
++ ret = do_send(&send, parent_root_id, is_first_subvol,
++ is_last_subvol, subvol);
+ if (ret < 0)
+ goto out;
+
+--
+1.8.4
+
+--
+To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
+the body of a message to majordomo@vger.kernel.org
+More majordomo info at http://vger.kernel.org/majordomo-info.html