From ca854f7da382fa2d032c354913350e9037ebb7aa Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Fri, 6 May 2011 14:03:12 +0200 Subject: [PATCH] 2.19.1-1: upgrade Signed-off-by: Karel Zak --- .gitignore | 1 + sources | 2 +- util-linux-2.19-libmount-uuid.patch | 78 ---------- util-linux-ng-2.16-blkid-wipe.patch | 219 ---------------------------- util-linux-ng-2.19-lsblk-SIZE.patch | 35 ----- util-linux.spec | 20 +-- 6 files changed, 8 insertions(+), 347 deletions(-) delete mode 100644 util-linux-2.19-libmount-uuid.patch delete mode 100644 util-linux-ng-2.16-blkid-wipe.patch delete mode 100644 util-linux-ng-2.19-lsblk-SIZE.patch diff --git a/.gitignore b/.gitignore index 912a99f..b85fc35 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ /util-linux-2.19-rc2.tar.bz2 /util-linux-2.19-rc3.tar.bz2 /util-linux-2.19.tar.bz2 +/util-linux-2.19.1.tar.bz2 diff --git a/sources b/sources index 83b415d..489116c 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ +3eab06f05163dfa65479c44e5231932c util-linux-2.19.1.tar.bz2 7eeb9a6f7a258174bf0fa80f1370788d floppy-0.16.tar.bz2 -590ca71aad0b254e2631d84401f28255 util-linux-2.19.tar.bz2 diff --git a/util-linux-2.19-libmount-uuid.patch b/util-linux-2.19-libmount-uuid.patch deleted file mode 100644 index 0487c73..0000000 --- a/util-linux-2.19-libmount-uuid.patch +++ /dev/null @@ -1,78 +0,0 @@ -From 307fb169ce47dff7fe01d99c25ed69752582ebce Mon Sep 17 00:00:00 2001 -From: Karel Zak -Date: Tue, 5 Apr 2011 14:17:51 +0200 -Subject: [PATCH] libmount: fix parsing of mountinfo from 2.6.39 - -The /proc/self/mountinfo file uses " - " field as a separator between -optional fields and next fields in the file. The '-' char could be -used in the fields (for example in UUIDs), so it's necessary to check -for whole " - " string rather than for '-' char only. - -Reported-by: "Aneesh Kumar K. V" -Signed-off-by: Karel Zak ---- - shlibs/mount/src/tab_parse.c | 29 +++++++++++++++++++++-------- - 1 files changed, 21 insertions(+), 8 deletions(-) - -diff --git a/shlibs/mount/src/tab_parse.c b/shlibs/mount/src/tab_parse.c -index b0007fa..e285c65 100644 ---- a/shlibs/mount/src/tab_parse.c -+++ b/shlibs/mount/src/tab_parse.c -@@ -113,9 +113,9 @@ static int mnt_parse_table_line(struct libmnt_fs *fs, char *s) - */ - static int mnt_parse_mountinfo_line(struct libmnt_fs *fs, char *s) - { -- int rc; -+ int rc, end = 0; - unsigned int maj, min; -- char *fstype, *src; -+ char *fstype, *src, *p; - - rc = sscanf(s, "%u " /* (1) id */ - "%u " /* (2) parent */ -@@ -123,11 +123,7 @@ static int mnt_parse_mountinfo_line(struct libmnt_fs *fs, char *s) - "%ms " /* (4) mountroot */ - "%ms " /* (5) target */ - "%ms" /* (6) vfs options (fs-independent) */ -- "%*[^-]" /* (7) optional fields */ -- "- " /* (8) separator */ -- "%ms " /* (9) FS type */ -- "%ms " /* (10) source */ -- "%ms", /* (11) fs options (fs specific) */ -+ "%n", /* number of read bytes */ - - &fs->id, - &fs->parent, -@@ -135,11 +131,28 @@ static int mnt_parse_mountinfo_line(struct libmnt_fs *fs, char *s) - &fs->root, - &fs->target, - &fs->vfs_optstr, -+ &end); -+ -+ if (rc >= 7 && end > 0) -+ s += end; -+ -+ /* (7) optional fields, terminated by " - " */ -+ p = strstr(s, " - "); -+ if (!p) { -+ DBG(TAB, mnt_debug("mountinfo parse error: not found separator")); -+ return -EINVAL; -+ } -+ s = p + 3; -+ -+ rc += sscanf(s, "%ms " /* (8) FS type */ -+ "%ms " /* (9) source */ -+ "%ms", /* (10) fs options (fs specific) */ -+ - &fstype, - &src, - &fs->fs_optstr); - -- if (rc == 10) { -+ if (rc >= 10) { - fs->flags |= MNT_FS_KERNEL; - fs->devno = makedev(maj, min); - --- -1.7.3.4 - diff --git a/util-linux-ng-2.16-blkid-wipe.patch b/util-linux-ng-2.16-blkid-wipe.patch deleted file mode 100644 index 151e6ca..0000000 --- a/util-linux-ng-2.16-blkid-wipe.patch +++ /dev/null @@ -1,219 +0,0 @@ -From 8b7eae458ccb04befb579dc87bdbfc1b6cbd5553 Mon Sep 17 00:00:00 2001 -From: Karel Zak -Date: Thu, 24 Feb 2011 14:03:44 +0100 -Subject: [PATCH] libblkid: try to detect if PT is newer than LVM - -LVM (pvcreate) wipes the begin of the device. If there is a PT in the -wiped area then LVM signature is obsolete. - - # pvcreate /dev/sdb - # fdisk /dev/sdb - -old version: - # blkid -p -o udev /dev/sdb - ID_FS_TYPE=LVM2_member - -new version: - # blkid -p -o udev /dev/sdb - ID_PART_TABLE_TYPE=dos - -Reported-by: Matej Cepl -Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=679799 -Signed-off-by: Karel Zak ---- - shlibs/blkid/src/blkidP.h | 10 ++++ - shlibs/blkid/src/partitions/dos.c | 3 + - shlibs/blkid/src/partitions/gpt.c | 2 + - shlibs/blkid/src/partitions/partitions.c | 2 +- - shlibs/blkid/src/probe.c | 78 ++++++++++++++++++++++++++++++ - shlibs/blkid/src/superblocks/lvm.c | 6 ++ - 6 files changed, 100 insertions(+), 1 deletions(-) - -diff --git a/shlibs/blkid/src/blkidP.h b/shlibs/blkid/src/blkidP.h -index 5bf9cca..94709a5 100644 ---- a/shlibs/blkid/src/blkidP.h -+++ b/shlibs/blkid/src/blkidP.h -@@ -198,6 +198,10 @@ struct blkid_struct_probe - int flags; /* private libray flags */ - int prob_flags; /* always zeroized by blkid_do_*() */ - -+ blkid_loff_t wipe_off; /* begin of the wiped area */ -+ blkid_loff_t wipe_size; /* size of the wiped area */ -+ struct blkid_chain *wipe_chain; /* superblock, partition, ... */ -+ - struct list_head buffers; /* list of buffers */ - - struct blkid_chain chains[BLKID_NCHAINS]; /* array of chains */ -@@ -428,6 +432,12 @@ extern int blkid_probe_sprintf_value(blkid_probe pr, const char *name, - extern void blkid_unparse_uuid(const unsigned char *uuid, char *str, size_t len); - extern size_t blkid_rtrim_whitespace(unsigned char *str); - -+extern void blkid_probe_set_wiper(blkid_probe pr, blkid_loff_t off, -+ blkid_loff_t size); -+extern int blkid_probe_is_wiped(blkid_probe pr, struct blkid_chain **chn, -+ blkid_loff_t off, blkid_loff_t size); -+extern void blkid_probe_use_wiper(blkid_probe pr, blkid_loff_t off, blkid_loff_t size); -+ - /* filter bitmap macros */ - #define blkid_bmp_wordsize (8 * sizeof(unsigned long)) - #define blkid_bmp_idx_bit(item) (1UL << ((item) % blkid_bmp_wordsize)) -diff --git a/shlibs/blkid/src/partitions/dos.c b/shlibs/blkid/src/partitions/dos.c -index c961ef7..72ac778 100644 ---- a/shlibs/blkid/src/partitions/dos.c -+++ b/shlibs/blkid/src/partitions/dos.c -@@ -177,6 +177,9 @@ static int probe_dos_pt(blkid_probe pr, const struct blkid_idmag *mag) - } - } - -+ blkid_probe_use_wiper(pr, BLKID_MSDOS_PT_OFFSET, -+ 512 - BLKID_MSDOS_PT_OFFSET); -+ - /* - * Well, all checks pass, it's MS-DOS partiton table - */ -diff --git a/shlibs/blkid/src/partitions/gpt.c b/shlibs/blkid/src/partitions/gpt.c -index 12100e0..8259c2f 100644 ---- a/shlibs/blkid/src/partitions/gpt.c -+++ b/shlibs/blkid/src/partitions/gpt.c -@@ -303,6 +303,8 @@ static int probe_gpt_pt(blkid_probe pr, const struct blkid_idmag *mag) - if (!h) - goto nothing; - -+ blkid_probe_use_wiper(pr, lba * blkid_probe_get_size(pr), 8); -+ - if (blkid_partitions_need_typeonly(pr)) - /* caller does not ask for details about partitions */ - return 0; -diff --git a/shlibs/blkid/src/partitions/partitions.c b/shlibs/blkid/src/partitions/partitions.c -index fb2e015..4fa826b 100644 ---- a/shlibs/blkid/src/partitions/partitions.c -+++ b/shlibs/blkid/src/partitions/partitions.c -@@ -556,7 +556,7 @@ static int partitions_probe(blkid_probe pr, struct blkid_chain *chn) - if (chn->binary) - partitions_init_data(pr, chn); - -- if (pr->prob_flags & BLKID_PARTS_IGNORE_PT) -+ if (!pr->wipe_size && (pr->prob_flags & BLKID_PARTS_IGNORE_PT)) - goto details_only; - - DBG(DEBUG_LOWPROBE, -diff --git a/shlibs/blkid/src/probe.c b/shlibs/blkid/src/probe.c -index 677b32f..3429277 100644 ---- a/shlibs/blkid/src/probe.c -+++ b/shlibs/blkid/src/probe.c -@@ -752,6 +752,7 @@ static inline void blkid_probe_start(blkid_probe pr) - if (pr) { - pr->cur_chain = NULL; - pr->prob_flags = 0; -+ blkid_probe_set_wiper(pr, 0, 0); - } - } - -@@ -760,6 +761,7 @@ static inline void blkid_probe_end(blkid_probe pr) - if (pr) { - pr->cur_chain = NULL; - pr->prob_flags = 0; -+ blkid_probe_set_wiper(pr, 0, 0); - } - } - -@@ -1338,3 +1340,79 @@ size_t blkid_rtrim_whitespace(unsigned char *str) - return i; - } - -+/* -+ * Some mkfs-like utils wipe some parts (usually begin) of the device. -+ * For example LVM (pvcreate) or mkswap(8). This information could be used -+ * for later resolution to conflicts between superblocks. -+ * -+ * For example we found valid LVM superblock, LVM wipes 8KiB at the begin of -+ * the device. If we found another signature (for example MBR) this wiped area -+ * then the signature has been added later and LVM superblock should be ignore. -+ * -+ * Note that this heuristic is not 100% reliable, for example "pvcreate --zero -+ * n" allows to keep the begin of the device unmodified. It's probably better -+ * to use this heuristic for conflicts between superblocks and partition tables -+ * than for conflicts between filesystem superblocks -- existence of unwanted -+ * partition table is very unusual, because PT is pretty visible (parsed and -+ * interpreted by kernel). -+ */ -+void blkid_probe_set_wiper(blkid_probe pr, blkid_loff_t off, blkid_loff_t size) -+{ -+ struct blkid_chain *chn; -+ -+ if (!pr) -+ return; -+ -+ if (!size) { -+ DBG(DEBUG_LOWPROBE, printf("zeroize wiper\n")); -+ pr->wipe_size = pr->wipe_off = 0; -+ pr->wipe_chain = NULL; -+ return; -+ } -+ -+ chn = pr->cur_chain; -+ -+ if (!chn || !chn->driver || -+ chn->idx < 0 || chn->idx >= chn->driver->nidinfos) -+ return; -+ -+ pr->wipe_size = size; -+ pr->wipe_off = off; -+ pr->wipe_chain = chn; -+ -+ DBG(DEBUG_LOWPROBE, -+ printf("wiper set to %s::%s off=%jd size=%jd\n", -+ chn->driver->name, -+ chn->driver->idinfos[chn->idx]->name, -+ pr->wipe_off, pr->wipe_size)); -+ return; -+} -+ -+/* -+ * Returns 1 if the <@off,@size> area was wiped -+ */ -+int blkid_probe_is_wiped(blkid_probe pr, struct blkid_chain **chn, -+ blkid_loff_t off, blkid_loff_t size) -+{ -+ if (!pr || !size) -+ return 0; -+ -+ if (pr->wipe_off <= off && off + size <= pr->wipe_off + pr->wipe_size) { -+ if (chn) -+ *chn = pr->wipe_chain; -+ return 1; -+ } -+ return 0; -+} -+ -+void blkid_probe_use_wiper(blkid_probe pr, blkid_loff_t off, blkid_loff_t size) -+{ -+ struct blkid_chain *chn = NULL; -+ -+ if (blkid_probe_is_wiped(pr, &chn, off, size) && chn) { -+ DBG(DEBUG_LOWPROBE, printf("wiped area detected -- ignore previous results\n")); -+ blkid_probe_set_wiper(pr, 0, 0); -+ blkid_probe_chain_reset_vals(pr, chn); -+ } -+} -+ -diff --git a/shlibs/blkid/src/superblocks/lvm.c b/shlibs/blkid/src/superblocks/lvm.c -index facf703..3a9807c 100644 ---- a/shlibs/blkid/src/superblocks/lvm.c -+++ b/shlibs/blkid/src/superblocks/lvm.c -@@ -112,6 +112,12 @@ static int probe_lvm2(blkid_probe pr, const struct blkid_idmag *mag) - /* the mag->magic is the same string as label->type, - * but zero terminated */ - blkid_probe_set_version(pr, mag->magic); -+ -+ /* LVM (pvcreate) wipes begin of the device -- let's remember this -+ * to resolve conflicts bettween LVM and partition tables, ... -+ */ -+ blkid_probe_set_wiper(pr, 0, 8 * 1024); -+ - return 0; - } - --- -1.7.3.4 - diff --git a/util-linux-ng-2.19-lsblk-SIZE.patch b/util-linux-ng-2.19-lsblk-SIZE.patch deleted file mode 100644 index d580c93..0000000 --- a/util-linux-ng-2.19-lsblk-SIZE.patch +++ /dev/null @@ -1,35 +0,0 @@ -diff -up util-linux-2.19/lib/strutils.c.kzak util-linux-2.19/lib/strutils.c ---- util-linux-2.19/lib/strutils.c.kzak 2011-01-31 16:43:47.000000000 +0100 -+++ util-linux-2.19/lib/strutils.c 2011-02-15 10:58:15.000000000 +0100 -@@ -245,8 +245,9 @@ static int get_exp(uint64_t n) - char *size_to_human_string(uint64_t bytes) - { - char buf[32]; -- int dec, frac, exp; -- const char *letters = "BKMGTP"; -+ int dec, exp; -+ uint64_t frac; -+ const char *letters = "BKMGTPE"; - char c; - - exp = get_exp(bytes); -@@ -254,6 +255,10 @@ char *size_to_human_string(uint64_t byte - dec = exp ? bytes / (1ULL << exp) : bytes; - frac = exp ? bytes % (1ULL << exp) : 0; - -+ /* fprintf(stderr, "exp: %d, c: %c, dec: %d, frac: %jd\n", -+ * exp, c, dec, frac); -+ */ -+ - if (frac) { - /* round */ - frac = (frac / (1ULL << (exp - 10)) + 50) / 100; -@@ -267,7 +272,7 @@ char *size_to_human_string(uint64_t byte - - if (!dp || !*dp) - dp = "."; -- snprintf(buf, sizeof(buf), "%d%s%d%c", dec, dp, frac, c); -+ snprintf(buf, sizeof(buf), "%d%s%jd%c", dec, dp, frac, c); - } else - snprintf(buf, sizeof(buf), "%d%c", dec, c); - diff --git a/util-linux.spec b/util-linux.spec index 08b9127..f7b1a1e 100644 --- a/util-linux.spec +++ b/util-linux.spec @@ -1,8 +1,8 @@ ### Header Summary: A collection of basic system utilities Name: util-linux -Version: 2.19 -Release: 4%{?dist} +Version: 2.19.1 +Release: 1%{?dist} License: GPLv2 and GPLv2+ and GPLv3+ and LGPLv2+ and BSD with advertising and Public Domain Group: System Environment/Base URL: http://kernel.org/~kzak/util-linux/ @@ -84,15 +84,6 @@ Patch7: util-linux-ng-2.13-login-lastlog.patch # 231192 - ipcs is not printing correct values on pLinux Patch8: util-linux-ng-2.15-ipcs-32bit.patch -### Upstream patches, backports to Fedora -### -# 677569 - lsblk: SIZE integer overflow on large values -Patch9: util-linux-ng-2.19-lsblk-SIZE.patch -# 679799 - blkid reports partitioned disk sdc as being an LVM PV -Patch10: util-linux-ng-2.16-blkid-wipe.patch -# Fix /proc/self/mouninfo parsing on kernel >= 2.6.39 -Patch11: util-linux-2.19-libmount-uuid.patch - %description The util-linux package contains a large variety of low-level system utilities that are necessary for a Linux system to function. Among @@ -206,9 +197,6 @@ cp %{SOURCE8} %{SOURCE9} . %patch5 -p1 %patch7 -p1 %patch8 -p1 -%patch9 -p1 -%patch10 -p1 -%patch11 -p1 %build unset LINGUAS || : @@ -754,6 +742,10 @@ fi %changelog +* Fri May 6 2011 Karel Zak 2.19.1-1 +- upgrade to the release 2.19.1 + ftp://ftp.kernel.org/pub/linux/utils/util-linux/v2.19/v2.19.1-ReleaseNotes + * Thu Apr 21 2011 Karel Zak 2.19-4 - fix /proc/self/mountinfo parsing in libmount https://lkml.org/lkml/2011/4/12/485