Blame SOURCES/0032-parted-fix-the-rescue-command.patch

0cb0b9
From 0b996d3ebe95fdb6704f2c1d1a82574e07e86798 Mon Sep 17 00:00:00 2001
0cb0b9
From: "Brian C. Lane" <bcl@redhat.com>
0cb0b9
Date: Tue, 12 Apr 2016 16:13:44 -0700
0cb0b9
Subject: [PATCH 32/36] parted: fix the rescue command
0cb0b9
0cb0b9
The rescue command often failed to locate a filesystem due to it
0cb0b9
leaving cylinder alignment on, which snapped the allowed bounds
0cb0b9
of the filesystem down to the next lower cylinder boundary,
0cb0b9
causing the detected filesystem to be rejected due to not fitting.
0cb0b9
0cb0b9
(cherry picked from commit e09c30fb53179319ba1543813b5b4024e923b795)
0cb0b9
---
0cb0b9
 parted/parted.c          |  4 ++++
0cb0b9
 tests/Makefile.am        |  1 +
0cb0b9
 tests/t1701-rescue-fs.sh | 52 ++++++++++++++++++++++++++++++++++++++++++++++++
0cb0b9
 3 files changed, 57 insertions(+)
0cb0b9
 create mode 100644 tests/t1701-rescue-fs.sh
0cb0b9
0cb0b9
diff --git a/parted/parted.c b/parted/parted.c
0cb0b9
index f8c81ca..18b778c 100644
0cb0b9
--- a/parted/parted.c
0cb0b9
+++ b/parted/parted.c
0cb0b9
@@ -1472,6 +1472,10 @@ do_rescue (PedDevice** dev, PedDisk** diskp)
0cb0b9
         disk = ped_disk_new (*dev);
0cb0b9
         if (!disk)
0cb0b9
                 goto error;
0cb0b9
+        if (ped_disk_is_flag_available(disk, PED_DISK_CYLINDER_ALIGNMENT))
0cb0b9
+                if (!ped_disk_set_flag(disk, PED_DISK_CYLINDER_ALIGNMENT,
0cb0b9
+                                       0))
0cb0b9
+                        goto error;
0cb0b9
 
0cb0b9
         if (!command_line_get_sector (_("Start?"), *dev, &start, NULL, NULL))
0cb0b9
                 goto error_destroy_disk;
0cb0b9
diff --git a/tests/Makefile.am b/tests/Makefile.am
0cb0b9
index 001b9de..6a06dce 100644
0cb0b9
--- a/tests/Makefile.am
0cb0b9
+++ b/tests/Makefile.am
0cb0b9
@@ -43,6 +43,7 @@ TESTS = \
0cb0b9
   t1102-loop-label.sh \
0cb0b9
   t1104-remove-and-add-partition.sh \
0cb0b9
   t1700-probe-fs.sh \
0cb0b9
+  t1701-rescue-fs.sh \
0cb0b9
   t2200-dos-label-recog.sh \
0cb0b9
   t2201-pc98-label-recog.sh \
0cb0b9
   t2300-dos-label-extended-bootcode.sh \
0cb0b9
diff --git a/tests/t1701-rescue-fs.sh b/tests/t1701-rescue-fs.sh
0cb0b9
new file mode 100644
0cb0b9
index 0000000..9b726cf
0cb0b9
--- /dev/null
0cb0b9
+++ b/tests/t1701-rescue-fs.sh
0cb0b9
@@ -0,0 +1,52 @@
0cb0b9
+#!/bin/sh
0cb0b9
+# rescue ext4 file system
0cb0b9
+
0cb0b9
+# Copyright (C) 2008-2014 Free Software Foundation, Inc.
0cb0b9
+
0cb0b9
+# This program is free software; you can redistribute it and/or modify
0cb0b9
+# it under the terms of the GNU General Public License as published by
0cb0b9
+# the Free Software Foundation; either version 3 of the License, or
0cb0b9
+# (at your option) any later version.
0cb0b9
+
0cb0b9
+# This program is distributed in the hope that it will be useful,
0cb0b9
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
0cb0b9
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0cb0b9
+# GNU General Public License for more details.
0cb0b9
+
0cb0b9
+# You should have received a copy of the GNU General Public License
0cb0b9
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
0cb0b9
+
0cb0b9
+. "${srcdir=.}/init.sh"; path_prepend_ ../parted
0cb0b9
+require_512_byte_sector_size_
0cb0b9
+require_root_
0cb0b9
+require_scsi_debug_module_
0cb0b9
+
0cb0b9
+# create memory-backed device
0cb0b9
+scsi_debug_setup_ sector_size=$sector_size_ dev_size_mb=32 > dev-name ||
0cb0b9
+  skip_ 'failed to create scsi_debug device'
0cb0b9
+scsi_dev=$(cat dev-name)
0cb0b9
+
0cb0b9
+( mkfs.ext4 2>&1 | grep -i '^usage' ) > /dev/null \
0cb0b9
+    || { warn_ "$ME: no ext4 support"; Exit $fail; }
0cb0b9
+
0cb0b9
+parted -s $scsi_dev mklabel msdos mkpart primary ext2 1m 100%
0cb0b9
+mkfs.ext4 ${scsi_dev}1 || { warn_ $ME: mkfs.ext4 failed; fail=1; Exit $fail; }
0cb0b9
+
0cb0b9
+# remove the partition
0cb0b9
+parted -s $scsi_dev rm 1 || fail=1
0cb0b9
+
0cb0b9
+# rescue the partition
0cb0b9
+echo yes | parted ---pretend-input-tty $scsi_dev rescue 1m 100% > out 2>&1
0cb0b9
+cat > exp <
0cb0b9
+Information: A ext4 primary partition was found at 1049kB -> 33.6MB.  Do you want to add it to the partition table?
0cb0b9
+Yes/No/Cancel? yes
0cb0b9
+Information: You may need to update /etc/fstab.
0cb0b9
+EOF
0cb0b9
+# Transform the actual output, to avoid spurious differences when
0cb0b9
+# $PWD contains a symlink-to-dir.  Also, remove the ^M      ...^M bogosity.
0cb0b9
+# normalize the actual output
0cb0b9
+mv out o2 && sed -e "s,
   *
,,g;s, $,," \
0cb0b9
+                      -e "s,^.*/lt-parted: ,parted: ," o2 > out
0cb0b9
+echo '' >> exp
0cb0b9
+compare out exp || fail=1
0cb0b9
+Exit $fail
0cb0b9
-- 
0cb0b9
2.5.5
0cb0b9