commit util-linux for openSUSE:Factory
Hello community, here is the log from the commit of package util-linux for openSUSE:Factory checked in at 2014-04-22 07:49:58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/util-linux (Old) and /work/SRC/openSUSE:Factory/.util-linux.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "util-linux" Changes: -------- --- /work/SRC/openSUSE:Factory/util-linux/util-linux.changes 2014-04-06 09:56:40.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.util-linux.new/util-linux.changes 2014-04-22 07:49:59.000000000 +0200 @@ -1,0 +2,19 @@ +Thu Apr 17 22:43:31 CEST 2014 - sbrabec@suse.cz + +- Enable socket activation needed by systemd service (bnc#872807). + +------------------------------------------------------------------- +Fri Apr 11 16:45:03 CEST 2014 - sbrabec@suse.cz + +- libblkid: Drop the broken ext2/ext3/ext4 discrimination logic + (util-linux-libblkid-ext-probe.patch, bnc#864703). + +------------------------------------------------------------------- +Fri Apr 11 16:27:11 CEST 2014 - hare@suse.de + +- Abort blkid probing on I/O errors (bnc#859062, + blkid-stop-scanning-on-I-O-error.patch, + blkid-convert-superblocks-to-new-calling-convention.patch, + http://www.spinics.net/lists/util-linux-ng/msg08976.html) + +------------------------------------------------------------------- New: ---- blkid-convert-superblocks-to-new-calling-convention.patch blkid-stop-scanning-on-I-O-error.patch util-linux-libblkid-ext-probe.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ util-linux.spec ++++++ --- /var/tmp/diff_new_pack.ZOW7Jm/_old 2014-04-22 07:50:00.000000000 +0200 +++ /var/tmp/diff_new_pack.ZOW7Jm/_new 2014-04-22 07:50:00.000000000 +0200 @@ -124,6 +124,13 @@ Patch23: util-linux-ng-2.19.1-barrier_documentation.patch # PATCH-FEATURE-SLES util-linux-lscpu-improve-hypervisor-detection.patch fate310255 puzel@novell.com -- Improve hypervisor detection. Patch24: util-linux-lscpu-improve-hypervisor-detection.patch +# PATH-FIX-SLES blkid-stop-scanning-on-I-O-error.patch bnc859062 hare@suse.de -- Abort blkid probing on I/O errors +Patch30: blkid-stop-scanning-on-I-O-error.patch +# PATH-FIX-SLES lkid-convert-superblocks-to-new-calling-convention.patch bnc859062 hare@suse.de -- convert blkid probing functions to new calling sequence +Patch31: blkid-convert-superblocks-to-new-calling-convention.patch +# PATH-FIX-UPSTREAM util-linux-libblkid-ext-probe.patch bnc864703 sbrabec@suse.cz -- libblkid: Drop the broken ext2/ext3/ext4 discrimination logic. +Patch32: util-linux-libblkid-ext-probe.patch + ## ## klogconsole ## @@ -256,6 +263,9 @@ %patch21 -p1 %patch23 -p1 %patch24 -p1 +%patch30 -p1 +%patch31 -p1 +%patch32 -p1 # # setctsid cp -p %{S:22} %{S:23} . @@ -311,6 +321,7 @@ --enable-new-mount \ --enable-login-utils \ --enable-tunelp \ + --enable-socket-activation \ %if %{with enable_last} --enable-last \ %else ++++++ blkid-convert-superblocks-to-new-calling-convention.patch ++++++ ++++ 2268 lines (skipped) ++++++ blkid-stop-scanning-on-I-O-error.patch ++++++
From 65245d440656a8df4352f9a5b9ec047bf4b6a663 Mon Sep 17 00:00:00 2001 From: Hannes Reinecke <hare@suse.de> Date: Tue, 21 Jan 2014 09:16:46 +0100 Subject: [PATCH] blkid: stop scanning on I/O error
Whenever we fail to read from a device it's pointless to continue with probing; we should be failing immediately. Otherwise the system will continue logging I/O errors. This patch updates the probe functions to return -1 on error and 1 if not found. Signed-off-by: Hannes Reinecke <hare@suse.de> --- libblkid/src/partitions/partitions.c | 13 +++++++++---- libblkid/src/probe.c | 13 +++++++++++-- libblkid/src/superblocks/superblocks.c | 13 ++++++++++--- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/libblkid/src/partitions/partitions.c b/libblkid/src/partitions/partitions.c index 6c915d9..98baece 100644 --- a/libblkid/src/partitions/partitions.c +++ b/libblkid/src/partitions/partitions.c @@ -540,7 +540,8 @@ static int idinfo_probe(blkid_probe pr, const struct blkid_idinfo *id, if (pr->size <= 0 || (id->minsz && id->minsz > pr->size)) goto nothing; /* the device is too small */ - if (blkid_probe_get_idmag(pr, id, &off, &mag)) + rc = blkid_probe_get_idmag(pr, id, &off, &mag); + if (rc != 0) goto nothing; /* final check by probing function */ @@ -548,12 +549,13 @@ static int idinfo_probe(blkid_probe pr, const struct blkid_idinfo *id, DBG(LOWPROBE, blkid_debug( "%s: ---> call probefunc()", id->name)); rc = id->probefunc(pr, mag); - if (rc == -1) { + if (rc != 0) { /* reset after error */ reset_partlist(blkid_probe_get_partlist(pr)); if (chn && !chn->binary) blkid_probe_chain_reset_vals(pr, chn); - DBG(LOWPROBE, blkid_debug("%s probefunc failed", id->name)); + DBG(LOWPROBE, blkid_debug("%s probefunc failed, rc %d", + id->name, rc)); } if (rc == 0 && mag && chn && !chn->binary) rc = blkid_probe_set_magic(pr, off, mag->len, @@ -599,7 +601,10 @@ static int partitions_probe(blkid_probe pr, struct blkid_chain *chn) continue; /* apply checks from idinfo */ - if (idinfo_probe(pr, idinfos[i], chn) != 0) + rc = idinfo_probe(pr, idinfos[i], chn); + if (rc < 0) + return rc; + if (rc > 0) continue; name = idinfos[i]->name; diff --git a/libblkid/src/probe.c b/libblkid/src/probe.c index 4b0c997..452c743 100644 --- a/libblkid/src/probe.c +++ b/libblkid/src/probe.c @@ -569,13 +569,17 @@ unsigned char *blkid_probe_get_buffer(blkid_probe pr, if (!bf) { ssize_t ret; - if (blkid_llseek(pr->fd, pr->off + off, SEEK_SET) < 0) + if (blkid_llseek(pr->fd, pr->off + off, SEEK_SET) < 0) { + errno = 0; return NULL; + } /* allocate info and space for data by why call */ bf = calloc(1, sizeof(struct blkid_bufinfo) + len); - if (!bf) + if (!bf) { + errno = 0; return NULL; + } bf->data = ((unsigned char *) bf) + sizeof(struct blkid_bufinfo); bf->len = len; @@ -587,7 +591,10 @@ unsigned char *blkid_probe_get_buffer(blkid_probe pr, ret = read(pr->fd, bf->data, len); if (ret != (ssize_t) len) { + DBG(LOWPROBE, blkid_debug("\tbuffer read: return %d error %d", ret, errno)); free(bf); + if (ret >= 0 || errno != EIO) + errno = 0; return NULL; } list_add_tail(&bf->bufs, &pr->buffers); @@ -794,6 +801,8 @@ int blkid_probe_get_idmag(blkid_probe pr, const struct blkid_idinfo *id, off = (mag->kboff + (mag->sboff >> 10)) << 10; buf = blkid_probe_get_buffer(pr, off, 1024); + if (!buf && errno) + return -1; if (buf && !memcmp(mag->magic, buf + (mag->sboff & 0x3ff), mag->len)) { DBG(LOWPROBE, blkid_debug("\tmagic sboff=%u, kboff=%ld", diff --git a/libblkid/src/superblocks/superblocks.c b/libblkid/src/superblocks/superblocks.c index 565daf2..ad93b4e 100644 --- a/libblkid/src/superblocks/superblocks.c +++ b/libblkid/src/superblocks/superblocks.c @@ -380,15 +380,22 @@ static int superblocks_probe(blkid_probe pr, struct blkid_chain *chn) DBG(LOWPROBE, blkid_debug("[%zd] %s:", i, id->name)); - if (blkid_probe_get_idmag(pr, id, &off, &mag)) + rc = blkid_probe_get_idmag(pr, id, &off, &mag); + if (rc < 0) + break; + if (rc > 0) continue; /* final check by probing function */ if (id->probefunc) { DBG(LOWPROBE, blkid_debug("\tcall probefunc()")); - if (id->probefunc(pr, mag) != 0) { + rc = id->probefunc(pr, mag); + if (rc != 0) { blkid_probe_chain_reset_vals(pr, chn); - continue; + if (rc < 0) + break; + else + continue; } } -- 1.8.1.4 ++++++ util-linux-libblkid-ext-probe.patch ++++++ This is a backport of patch from master branch. commit a1ca32fb3862ccac7275d6b342805b6d99f20e39 Author: Lukas Czerner <lczerner@redhat.com> Date: Tue Dec 3 16:24:44 2013 +0100 libblkid: Identify extN file system properly Currently when trying to identify extN file system we're playing games with searching for kernel modules and parsing /proc/filesystem. All of this just because ext4 module can be used to mount ext3 and ext2 file systems on recent kernel and also because of ext4dev. However all of this is not necessary. Ext4 module which does support mounting ext2 and ext3 file system is able to recognize and mount ext2 and ext3 type so there is no need to disguise it and ext4dev should only be ever used for testing and not as fallback when other modules are missing (use -t instead). This also introduces a bug when in situation that we only have ext4 modules with ext2/ext3 support which is not loaded and we try to mount ext2 file system we will mount it incorrectly as ext4. This will not happen if the ext4 module is already loaded. With this patch we remove all the unnecessary checks and return the real type of the file system which is on the device. This fixes the issue. However on the kernel which was not compiled with EXT4_USE_FOR_EXT23 support one would have to provide file system type (-t) to be able to mount the file system with ext4 driver. Signed-off-by: Lukas Czerner <lczerner@redhat.com> Signed-off-by: Karel Zak <kzak@redhat.com> Index: util-linux-2.24.1/libblkid/src/superblocks/ext.c =================================================================== --- util-linux-2.24.1.orig/libblkid/src/superblocks/ext.c +++ util-linux-2.24.1/libblkid/src/superblocks/ext.c @@ -18,7 +18,6 @@ #endif #include <time.h> -#include "linux_version.h" #include "superblocks.h" struct ext2_super_block { @@ -132,140 +131,11 @@ struct ext2_super_block { #define EXT3_FEATURE_RO_COMPAT_UNSUPPORTED ~EXT3_FEATURE_RO_COMPAT_SUPP /* - * Check to see if a filesystem is in /proc/filesystems. - * Returns 1 if found, 0 if not - */ -static int fs_proc_check(const char *fs_name) -{ - FILE *f; - char buf[80], *cp, *t; - - f = fopen("/proc/filesystems", "r" UL_CLOEXECSTR); - if (!f) - return 0; - while (!feof(f)) { - if (!fgets(buf, sizeof(buf), f)) - break; - cp = buf; - if (!isspace(*cp)) { - while (*cp && !isspace(*cp)) - cp++; - } - while (*cp && isspace(*cp)) - cp++; - if ((t = strchr(cp, '\n')) != NULL) - *t = 0; - if ((t = strchr(cp, '\t')) != NULL) - *t = 0; - if ((t = strchr(cp, ' ')) != NULL) - *t = 0; - if (!strcmp(fs_name, cp)) { - fclose(f); - return 1; - } - } - fclose(f); - return (0); -} - -/* - * Check to see if a filesystem is available as a module - * Returns 1 if found, 0 if not - */ -static int check_for_modules(const char *fs_name) -{ -#ifdef __linux__ - struct utsname uts; - FILE *f; - char buf[1024], *cp; - int namesz; - - if (uname(&uts)) - return 0; - snprintf(buf, sizeof(buf), "/lib/modules/%s/modules.dep", uts.release); - - f = fopen(buf, "r" UL_CLOEXECSTR); - if (!f) - return 0; - - namesz = strlen(fs_name); - - while (!feof(f)) { - if (!fgets(buf, sizeof(buf), f)) - break; - if ((cp = strchr(buf, ':')) != NULL) - *cp = 0; - else - continue; - if ((cp = strrchr(buf, '/')) == NULL) - continue; - cp++; - - if (!strncmp(cp, fs_name, namesz) && - (!strcmp(cp + namesz, ".ko") || - !strcmp(cp + namesz, ".ko.gz"))) { - fclose(f); - return 1; - } - } - fclose(f); -#endif /* __linux__ */ - return 0; -} - -/* * Starting in 2.6.29, ext4 can be used to support filesystems * without a journal. */ #define EXT4_SUPPORTS_EXT2 KERNEL_VERSION(2, 6, 29) -static int system_supports_ext2(void) -{ - static time_t last_check = 0; - static int ret = -1; - time_t now = time(0); - - if (ret != -1 || (now - last_check) < 5) - return ret; - last_check = now; - ret = (fs_proc_check("ext2") || check_for_modules("ext2")); - return ret; -} - -static int system_supports_ext4(void) -{ - static time_t last_check = 0; - static int ret = -1; - time_t now = time(0); - - if (ret != -1 || (now - last_check) < 5) - return ret; - last_check = now; - ret = (fs_proc_check("ext4") || check_for_modules("ext4")); - return ret; -} - -static int system_supports_ext4dev(void) -{ - static time_t last_check = 0; - static int ret = -1; - time_t now = time(0); - - if (ret != -1 || (now - last_check) < 5) - return ret; - last_check = now; - ret = (fs_proc_check("ext4dev") || check_for_modules("ext4dev")); - return ret; -} - -static int system_supports_ext4_ext2(void) -{ -#ifdef __linux__ - return get_linux_version() >= EXT4_SUPPORTS_EXT2; -#else - return 0; -#endif -} /* * reads superblock and returns: * fc = feature_compat @@ -357,15 +227,6 @@ static int probe_ext2(blkid_probe pr, (fi & EXT2_FEATURE_INCOMPAT_UNSUPPORTED)) return 1; - /* - * If ext2 is not present, but ext4 or ext4dev are, then - * disclaim we are ext2 - */ - if (!system_supports_ext2() && - (system_supports_ext4() || system_supports_ext4dev()) && - system_supports_ext4_ext2()) - return 1; - ext_get_info(pr, 2, es); return 0; } @@ -408,34 +269,9 @@ static int probe_ext4dev(blkid_probe pr, if (fi & EXT3_FEATURE_INCOMPAT_JOURNAL_DEV) return 1; - /* - * If the filesystem does not have a journal and ext2 and ext4 - * is not present, then force this to be detected as an - * ext4dev filesystem. - */ - if (!(fc & EXT3_FEATURE_COMPAT_HAS_JOURNAL) && - !system_supports_ext2() && !system_supports_ext4() && - system_supports_ext4dev() && - system_supports_ext4_ext2()) - goto force_ext4dev; - - /* - * If the filesystem is marked as OK for use by in-development - * filesystem code, but ext4dev is not supported, and ext4 is, - * then don't call ourselves ext4dev, since we should be - * detected as ext4 in that case. - * - * If the filesystem is marked as in use by production - * filesystem, then it can only be used by ext4 and NOT by - * ext4dev, so always disclaim we are ext4dev in that case. - */ - if (le32_to_cpu(es->s_flags) & EXT2_FLAGS_TEST_FILESYS) { - if (!system_supports_ext4dev() && system_supports_ext4()) - return 1; - } else + if (!(le32_to_cpu(es->s_flags) & EXT2_FLAGS_TEST_FILESYS)) return 1; -force_ext4dev: ext_get_info(pr, 4, es); return 0; } @@ -454,22 +290,11 @@ static int probe_ext4(blkid_probe pr, if (fi & EXT3_FEATURE_INCOMPAT_JOURNAL_DEV) return 1; - /* - * If the filesystem does not have a journal and ext2 is not - * present, then force this to be detected as an ext2 - * filesystem. - */ - if (!(fc & EXT3_FEATURE_COMPAT_HAS_JOURNAL) && - !system_supports_ext2() && system_supports_ext4() && - system_supports_ext4_ext2()) - goto force_ext4; - /* Ext4 has at least one feature which ext3 doesn't understand */ if (!(frc & EXT3_FEATURE_RO_COMPAT_UNSUPPORTED) && !(fi & EXT3_FEATURE_INCOMPAT_UNSUPPORTED)) return 1; -force_ext4: /* * If the filesystem is a OK for use by in-development * filesystem code, and ext4dev is supported or ext4 is not @@ -480,10 +305,8 @@ force_ext4: * filesystem, then it can only be used by ext4 and NOT by * ext4dev. */ - if (le32_to_cpu(es->s_flags) & EXT2_FLAGS_TEST_FILESYS) { - if (system_supports_ext4dev() || !system_supports_ext4()) - return 1; - } + if (le32_to_cpu(es->s_flags) & EXT2_FLAGS_TEST_FILESYS) + return 1; ext_get_info(pr, 4, es); return 0; -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org
participants (1)
-
root@hilbert.suse.de