From f9646ba6525782eb3754838d3250ee54878a9326265072caae825fafd641d449 Mon Sep 17 00:00:00 2001 From: David Sterba Date: Fri, 9 Aug 2013 12:09:44 +0000 Subject: [PATCH] Accepting request 186576 from home:dsterba:branches:filesystems SR: urgent fix, breaks installation - fix loop mount detection again (bnc#834173) OBS-URL: https://build.opensuse.org/request/show/186576 OBS-URL: https://build.opensuse.org/package/show/filesystems/btrfsprogs?expand=0&rev=135 --- ...s-progs-fix-loop-device-mount-checks.patch | 83 +++++++++++++++++++ btrfsprogs.changes | 5 ++ btrfsprogs.spec | 2 + 3 files changed, 90 insertions(+) create mode 100644 0040-btrfs-progs-fix-loop-device-mount-checks.patch diff --git a/0040-btrfs-progs-fix-loop-device-mount-checks.patch b/0040-btrfs-progs-fix-loop-device-mount-checks.patch new file mode 100644 index 0000000..0b77e17 --- /dev/null +++ b/0040-btrfs-progs-fix-loop-device-mount-checks.patch @@ -0,0 +1,83 @@ +From be65fb331902152d9b571b2d4ee1bf26bedc795f Mon Sep 17 00:00:00 2001 +From: David Sterba +Date: Thu, 27 Oct 2011 16:23:14 -0400 +Subject: [PATCH 40/46] btrfs-progs: fix loop device mount checks + +When creating a fs on a loop device, mkfs checks whether the same file +is not already mounted, but the backing file of another loop dev may not +exist and mkfs fails. + +Signed-off-by: David Sterba +--- + utils.c | 34 +++++++++++++++++++--------------- + 1 file changed, 19 insertions(+), 15 deletions(-) + +diff --git a/utils.c b/utils.c +index 41bfdb0..47b31fc 100644 +--- a/utils.c ++++ b/utils.c +@@ -773,11 +773,11 @@ int is_same_blk_file(const char* a, const char* b) + char real_a[PATH_MAX]; + char real_b[PATH_MAX]; + +- if(!realpath(a, real_a) || +- !realpath(b, real_b)) +- { +- return -errno; +- } ++ if(!realpath(a, real_a)) ++ strcpy(real_a, a); ++ ++ if (!realpath(b, real_b)) ++ strcpy(real_b, b); + + /* Identical path? */ + if(strcmp(real_a, real_b) == 0) +@@ -818,8 +818,8 @@ int is_same_loop_file(const char* a, const char* b) + { + char res_a[PATH_MAX]; + char res_b[PATH_MAX]; +- const char* final_a; +- const char* final_b; ++ const char* final_a = NULL; ++ const char* final_b = NULL; + int ret; + + /* Resolve a if it is a loop device */ +@@ -828,10 +828,12 @@ int is_same_loop_file(const char* a, const char* b) + return 0; + return ret; + } else if (ret) { +- if ((ret = resolve_loop_device(a, res_a, sizeof(res_a))) < 0) +- return ret; +- +- final_a = res_a; ++ if ((ret = resolve_loop_device(a, res_a, sizeof(res_a))) < 0) { ++ if (errno != EPERM) ++ return ret; ++ } ++ else ++ final_a = res_a; + } else { + final_a = a; + } +@@ -842,10 +844,12 @@ int is_same_loop_file(const char* a, const char* b) + return 0; + return ret; + } else if (ret) { +- if((ret = resolve_loop_device(b, res_b, sizeof(res_b))) < 0) +- return ret; +- +- final_b = res_b; ++ if ((ret = resolve_loop_device(b, res_b, sizeof(res_b))) < 0) { ++ if (errno != EPERM) ++ return ret; ++ } ++ else ++ final_b = res_b; + } else { + final_b = b; + } +-- +1.8.0.2 + diff --git a/btrfsprogs.changes b/btrfsprogs.changes index ebca1f7..6e40ca5 100644 --- a/btrfsprogs.changes +++ b/btrfsprogs.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Fri Aug 9 14:03:04 CEST 2013 - dsterba@suse.cz + +- fix loop mount detection again (bnc#834173) + ------------------------------------------------------------------- Mon Jul 22 17:50:52 CEST 2013 - ohering@suse.de diff --git a/btrfsprogs.spec b/btrfsprogs.spec index 348c307..f8e7d62 100644 --- a/btrfsprogs.spec +++ b/btrfsprogs.spec @@ -34,6 +34,7 @@ Source2: btrfs-dev-clear-sb Source3: 80-btrfs.rules Patch10: 0010-Btrfs-progs-make-btrfsck-a-hardlink-at-install-time.patch Patch12: 0012-libbtrfs-Set-SONAME-to-libbtrfs.so.0-instead-of-libb.patch +Patch40: 0040-btrfs-progs-fix-loop-device-mount-checks.patch Patch1000: local-version-override.patch Patch1001: btrfs-progs-use-IEEE1541-suffixes-for-sizes.patch Patch1002: btrfs-progs-add-man-page-for-btrfs-convert.patch @@ -75,6 +76,7 @@ build applications to interface with btrfs. %setup -q -n btrfs-progs-%{tar_version} %patch10 -p1 %patch12 -p1 +%patch40 -p1 %patch1000 -p1 %patch1001 -p1 %patch1002 -p1