2.28.1: upgrade

This commit is contained in:
Karel Zak 2016-04-12 13:38:27 +02:00
parent 77818367d0
commit 02e8b22b8e
4 changed files with 7 additions and 165 deletions

1
.gitignore vendored
View File

@ -47,3 +47,4 @@
/util-linux-2.27.1.tar.xz
/util-linux-2.28-rc1.tar.xz
/util-linux-2.28-rc2.tar.xz
/util-linux-2.28.tar.xz

View File

@ -1,160 +0,0 @@
From e04f386084c72df17e1d1e7d7d3e1e420a198442 Mon Sep 17 00:00:00 2001
From: Karel Zak <kzak@redhat.com>
Date: Wed, 30 Mar 2016 14:53:33 +0200
Subject: [PATCH] libblkid: revert mmap usage
The implementation has not been ready for I/O errors and it seems that
there is no elegant way how to resolve this issue. Linux returns
SIGBUS on mmap errors and play with signals (or longjumps) in shared
library is really bad idea.
It also seems that mmaped devices have some unexpected side-effects
with page-cache where for example dd returns old data for already
modified device etc.
Signed-off-by: Karel Zak <kzak@redhat.com>
---
libblkid/src/blkidP.h | 1 -
libblkid/src/probe.c | 90 ++-------------------------------------------------
2 files changed, 2 insertions(+), 89 deletions(-)
diff --git a/libblkid/src/blkidP.h b/libblkid/src/blkidP.h
index 916deb0..e9a267e 100644
--- a/libblkid/src/blkidP.h
+++ b/libblkid/src/blkidP.h
@@ -180,7 +180,6 @@ struct blkid_struct_probe
int fd; /* device file descriptor */
uint64_t off; /* begin of data on the device */
uint64_t size; /* end of data on the device */
- size_t mmap_granularity; /* minimal size of mmaped buffer (PAGE_SIZE) */
dev_t devno; /* device number (st.st_rdev) */
dev_t disk_devno; /* devno of the whole-disk or 0 */
diff --git a/libblkid/src/probe.c b/libblkid/src/probe.c
index 9c48462..34d97b8 100644
--- a/libblkid/src/probe.c
+++ b/libblkid/src/probe.c
@@ -104,7 +104,6 @@
#include <stdint.h>
#include <stdarg.h>
#include <limits.h>
-#include <sys/mman.h>
#ifdef HAVE_LIBUUID
# include <uuid.h>
@@ -581,85 +580,6 @@ int __blkid_probe_filter_types(blkid_probe pr, int chain, int flag, char *names[
return 0;
}
-/* align to mmap granularity */
-#define PROBE_ALIGN_OFF(p, o) ((o) & ~((p)->mmap_granularity - 1ULL))
-/* default buffer sizes */
-#define PROBE_MMAP_BEGINSIZ (1024ULL * 1024ULL * 2ULL) /* begin of the device */
-#define PROBE_MMAP_ENDSIZ (1024ULL * 1024ULL * 2ULL) /* end of the device */
-#define PROBE_MMAP_MIDSIZ (1024ULL * 1024ULL) /* middle of the device */
-
-#define probe_is_mmap_wanted(p) (!S_ISCHR((p)->mode))
-
-static struct blkid_bufinfo *mmap_buffer(blkid_probe pr, uint64_t real_off, uint64_t len)
-{
- uint64_t map_len;
- uint64_t map_off = 0;
- struct blkid_bufinfo *bf = NULL;
-
- /*
- * libblkid heavily reads begin and end of the device, so it seems
- * better to mmap ~2MiB from the begin and end of the device to reduces
- * number of syscalls and necessary buffers. For random accees
- * somewhere in the middle of the device we use 1MiB buffers.
- */
- if (!pr->mmap_granularity)
- pr->mmap_granularity = getpagesize();
-
- /* begin of the device */
- if (real_off == 0 || real_off + len < PROBE_MMAP_BEGINSIZ) {
- DBG(BUFFER, ul_debug("\tmapping begin of the device (max size: %"PRIu64")", pr->size));
- map_off = 0;
- map_len = PROBE_MMAP_BEGINSIZ > pr->size ? pr->size : PROBE_MMAP_BEGINSIZ;
-
-
- /* end of the device */
- } else if (real_off > pr->off + pr->size - PROBE_MMAP_ENDSIZ) {
- DBG(BUFFER, ul_debug("\tmapping end of the device (probing area: "
- "off=%"PRIu64", size=%"PRIu64")", pr->off, pr->size));
-
- map_off = PROBE_ALIGN_OFF(pr, pr->off + pr->size - PROBE_MMAP_ENDSIZ);
- map_len = pr->off + pr->size - map_off;
-
- /* middle of the device */
- } else {
- uint64_t minlen;
-
- map_off = PROBE_ALIGN_OFF(pr, real_off);
- minlen = real_off + len - map_off;
-
- map_len = minlen > PROBE_MMAP_MIDSIZ ? minlen : PROBE_MMAP_MIDSIZ;
-
- if (map_off + map_len > pr->off + pr->size)
- map_len = pr->size - map_off;
- }
-
- assert(map_off <= real_off);
- assert(map_off + map_len >= real_off + len);
-
- /* allocate buffer handler */
- bf = malloc(sizeof(*bf));
- if (!bf) {
- errno = ENOMEM;
- return NULL;
- }
-
- /* mmap into memmory */
- bf->data = mmap(NULL, map_len, PROT_READ, MAP_SHARED, pr->fd, map_off);
- if (bf->data == MAP_FAILED) {
- DBG(BUFFER, ul_debug("\tmmap failed: %m"));
- free(bf);
- return NULL;
- }
-
- bf->off = map_off;
- bf->len = map_len;
- INIT_LIST_HEAD(&bf->bufs);
-
- DBG(BUFFER, ul_debug("\tmmap %p: off=%"PRIu64", len=%"PRIu64" (%"PRIu64" pages)",
- bf->data, map_off, map_len, map_len / pr->mmap_granularity));
- return bf;
-}
-
static struct blkid_bufinfo *read_buffer(blkid_probe pr, uint64_t real_off, uint64_t len)
{
ssize_t ret;
@@ -759,10 +679,7 @@ unsigned char *blkid_probe_get_buffer(blkid_probe pr, uint64_t off, uint64_t len
/* not found; read from disk */
if (!bf) {
- if (probe_is_mmap_wanted(pr))
- bf = mmap_buffer(pr, real_off, len);
- else
- bf = read_buffer(pr, real_off, len);
+ bf = read_buffer(pr, real_off, len);
if (!bf)
return NULL;
@@ -794,13 +711,10 @@ static void blkid_probe_reset_buffer(blkid_probe pr)
DBG(BUFFER, ul_debug(" remove buffer: %p [off=%"PRIu64", len=%"PRIu64"]",
bf->data, bf->off, bf->len));
-
- if (probe_is_mmap_wanted(pr))
- munmap(bf->data, bf->len);
free(bf);
}
- DBG(LOWPROBE, ul_debug(" buffers summary: %"PRIu64" bytes by %"PRIu64" read/mmap() calls",
+ DBG(LOWPROBE, ul_debug(" buffers summary: %"PRIu64" bytes by %"PRIu64" read() calls",
len, ct));
INIT_LIST_HEAD(&pr->buffers);
--
2.4.3

View File

@ -1 +1 @@
ea0c349440708f28e6e3edbc715a467d util-linux-2.28-rc2.tar.xz
e534e6ccc49107e5d31c329af798ef7d util-linux-2.28.tar.xz

View File

@ -2,13 +2,13 @@
Summary: A collection of basic system utilities
Name: util-linux
Version: 2.28
Release: 0.3%{?dist}
Release: 1%{?dist}
License: GPLv2 and GPLv2+ and LGPLv2+ and BSD with advertising and Public Domain
Group: System Environment/Base
URL: http://en.wikipedia.org/wiki/Util-linux
### Macros
%define upstream_version %{version}-rc2
%define upstream_version %{version}
%define upstream_major %(eval echo %{version} | %{__sed} -e 's/\([[:digit:]]*\)\.\([[:digit:]]*\)\.[[:digit:]]*$/\1.\2/')
%define compldir %{_datadir}/bash-completion/completions/
@ -88,8 +88,6 @@ Requires: libfdisk = %{version}-%{release}
###
# 151635 - makeing /var/log/lastlog
Patch0: 2.23-login-lastlog-create.patch
# upstream patch, revert mmap() based probing
Patch1: 2.28-libblkid-mmap.patch
%description
The util-linux package contains a large variety of low-level system
@ -921,6 +919,9 @@ exit 0
%{_libdir}/python*/site-packages/libmount/*
%changelog
* Tue Apr 12 2016 Karel Zak <kzak@redhat.com> - 2.28-1
- upgrade to stable v2.28
* Wed Mar 30 2016 Karel Zak <kzak@redhat.com> - 2.28-0.3
- fix libblkid