updated ccw udev rules

converted cio_free_device from an upstart job to systemd unit (jstodola)
mon_statd: switch to using udevadm settle (#688140)
cpuplugd: Fix incorrect multiplication in rules evaluation (#693365)
cmsfs-fuse: Delete old file if renaming to an existing file (#690505)
cmsfs-fuse: Enlarge fsname string (#690506)
cmsfs-fuse: Unable to use cmsfs-fuse if $HOME is not set (#690514)
hyptop: Prevent interactive mode on s390 line mode terminals (#690810)
This commit is contained in:
Dan Horák 2011-04-27 10:41:28 +02:00
parent f7e20b2418
commit c46bddaf55
10 changed files with 558 additions and 25 deletions

View File

@ -0,0 +1,297 @@
From f6494a1210439d591a1319498026ffcdd91a2ebf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
Date: Tue, 29 Mar 2011 10:49:25 +0200
Subject: [PATCH 67/70] cmsfs-fuse: Delete old file if renaming to an existing file
Description: cmsfs-fuse: Delete old file if renaming to an existing file.
Symptom: Stale old file if renaming a file to an existing file.
Problem: In case rename is used to overwrite an existing file the old
file entry was not deleted resulting in a duplicated file.
Solution: If the target of a rename operation exists delete the target
file before the rename operation.
---
cmsfs-fuse/cmsfs-fuse.c | 248 ++++++++++++++++++++++++-----------------------
1 files changed, 128 insertions(+), 120 deletions(-)
diff --git a/cmsfs-fuse/cmsfs-fuse.c b/cmsfs-fuse/cmsfs-fuse.c
index fd87774..9f1aa1a 100644
--- a/cmsfs-fuse/cmsfs-fuse.c
+++ b/cmsfs-fuse/cmsfs-fuse.c
@@ -2638,14 +2638,132 @@ static int cmsfs_utimens(const char *path, const struct timespec ts[2])
return 0;
}
+/*
+ * Get the address of the last directory entry.
+ */
+off_t find_last_fdir_entry(off_t addr, int level)
+{
+ struct fst_entry fst;
+ int left, rc;
+ off_t ptr;
+
+ if (level > 0) {
+ level--;
+ left = PTRS_PER_BLOCK;
+ while (left--) {
+ ptr = get_fixed_pointer(addr + left * PTR_SIZE);
+ BUG(ptr < 0);
+ if (ptr)
+ return find_last_fdir_entry(ptr, level);
+ }
+ DIE("Directory entry not found\n");
+ return 0;
+ }
+
+ left = cmsfs.blksize / sizeof(struct fst_entry);
+ while (left--) {
+ rc = _read(&fst, sizeof(fst),
+ addr + left * sizeof(struct fst_entry));
+ BUG(rc < 0);
+ if (is_file((unsigned long long *) fst.name,
+ (unsigned long long *) fst.type))
+ return addr + left * sizeof(struct fst_entry);
+ }
+ DIE("Directory entry not found\n");
+}
+
+static int delete_file(const char *path)
+{
+ off_t fst_kill, fst_last;
+ struct walk_file walk;
+ struct file *f_moved;
+ char file[MAX_FNAME];
+ struct fst_entry fst;
+ struct file *f;
+ int rc = 0, i;
+
+ if (cmsfs.readonly)
+ return -EROFS;
+
+ fst_kill = lookup_file(path + 1, &fst, SHOW_UNLINKED);
+ if (!fst_kill)
+ return -ENOENT;
+ f = create_file_object(&fst, &rc);
+ if (f == NULL)
+ return rc;
+
+ /* delete all data blocks */
+ for (i = 0; i < f->fst->nr_blocks; i++)
+ free_block(f->blist[i].disk_addr);
+
+ if (f->fst->fop) {
+ rc = f->fops->delete_pointers(f, f->fst->levels, ABS(f->fst->fop));
+ if (rc < 0)
+ goto error;
+ }
+
+ if (cmsfs.dir_levels)
+ fst_last = find_last_fdir_entry(get_fop(cmsfs.fdir), cmsfs.dir_levels);
+ else
+ fst_last = find_last_fdir_entry(cmsfs.fdir, cmsfs.dir_levels);
+
+ /* remove unlinked file from fcache */
+ strncpy(file, path + 1, MAX_FNAME);
+ str_toupper(file);
+ invalidate_htab_entry(file);
+
+ if (fst_last == fst_kill)
+ goto skip_copy;
+
+ /* copy last entry over unlinked entry */
+ rc = _read(&fst, sizeof(struct fst_entry), fst_last);
+ BUG(rc < 0);
+ rc = _write(&fst, sizeof(struct fst_entry), fst_kill);
+ BUG(rc < 0);
+
+ /* update moved fcache entry */
+ memset(file, 0, sizeof(file));
+ decode_edf_name(file, fst.name, fst.type);
+ update_htab_entry(fst_kill, file);
+ /* update cached address of moved FST */
+ f_moved = file_open(file);
+ if (f_moved != NULL)
+ f->fst_addr = fst_kill;
+
+skip_copy:
+ /* delete last entry */
+ rc = _zero(fst_last, sizeof(struct fst_entry));
+ BUG(rc < 0);
+
+ /* if the deleted entry was the first of a block, free the block */
+ if (fst_last % cmsfs.blksize == 0) {
+ cache_dblocks(&walk);
+ /* delete the last block from dlist */
+ walk.dlist_used--;
+ free_block(fst_last);
+ purge_dblock_ptrs(cmsfs.dir_levels, get_fop(cmsfs.fdir));
+ rewrite_dblock_ptrs(&walk);
+ free_dblocks(&walk);
+ }
+
+ destroy_file_object(f);
+ decrease_file_count();
+ update_block_count();
+ return 0;
+
+error:
+ destroy_file_object(f);
+ return rc;
+}
+
static int cmsfs_rename(const char *path, const char *new_path)
{
+ struct fst_entry fst, fst_new;
+ off_t fst_addr, fst_addr_new;
char uc_old_name[MAX_FNAME];
char fname[8], ftype[8];
- struct fst_entry fst;
char *uc_new_name;
struct file *f;
- off_t fst_addr;
int rc;
if (cmsfs.readonly)
@@ -2655,6 +2773,14 @@ static int cmsfs_rename(const char *path, const char *new_path)
if (!fst_addr)
return -ENOENT;
+ /* if new file already exists it must be overwritten so delete it */
+ fst_addr_new = lookup_file(new_path + 1, &fst_new, HIDE_UNLINKED);
+ if (fst_addr_new) {
+ delete_file(new_path);
+ /* fst_addr may have changed due to copy-up */
+ fst_addr = lookup_file(path + 1, &fst, HIDE_UNLINKED);
+ }
+
rc = edf_name_valid(new_path + 1);
if (rc)
return rc;
@@ -4042,124 +4168,6 @@ static int cmsfs_write(const char *path, const char *buf, size_t size,
return rc;
}
-/*
- * Get the address of the last directory entry.
- */
-off_t find_last_fdir_entry(off_t addr, int level)
-{
- struct fst_entry fst;
- int left, rc;
- off_t ptr;
-
- if (level > 0) {
- level--;
- left = PTRS_PER_BLOCK;
- while (left--) {
- ptr = get_fixed_pointer(addr + left * PTR_SIZE);
- BUG(ptr < 0);
- if (ptr)
- return find_last_fdir_entry(ptr, level);
- }
- DIE("Directory entry not found\n");
- return 0;
- }
-
- left = cmsfs.blksize / sizeof(struct fst_entry);
- while (left--) {
- rc = _read(&fst, sizeof(fst),
- addr + left * sizeof(struct fst_entry));
- BUG(rc < 0);
- if (is_file((unsigned long long *) fst.name,
- (unsigned long long *) fst.type))
- return addr + left * sizeof(struct fst_entry);
- }
- DIE("Directory entry not found\n");
-}
-
-static int delete_file(const char *path)
-{
- off_t fst_kill, fst_last;
- struct walk_file walk;
- struct file *f_moved;
- char file[MAX_FNAME];
- struct fst_entry fst;
- struct file *f;
- int rc = 0, i;
-
- if (cmsfs.readonly)
- return -EROFS;
-
- fst_kill = lookup_file(path + 1, &fst, SHOW_UNLINKED);
- if (!fst_kill)
- return -ENOENT;
- f = create_file_object(&fst, &rc);
- if (f == NULL)
- return rc;
-
- /* delete all data blocks */
- for (i = 0; i < f->fst->nr_blocks; i++)
- free_block(f->blist[i].disk_addr);
-
- if (f->fst->fop) {
- rc = f->fops->delete_pointers(f, f->fst->levels, ABS(f->fst->fop));
- if (rc < 0)
- goto error;
- }
-
- if (cmsfs.dir_levels)
- fst_last = find_last_fdir_entry(get_fop(cmsfs.fdir), cmsfs.dir_levels);
- else
- fst_last = find_last_fdir_entry(cmsfs.fdir, cmsfs.dir_levels);
-
- /* remove unlinked file from fcache */
- strncpy(file, path + 1, MAX_FNAME);
- str_toupper(file);
- invalidate_htab_entry(file);
-
- if (fst_last == fst_kill)
- goto skip_copy;
-
- /* copy last entry over unlinked entry */
- rc = _read(&fst, sizeof(struct fst_entry), fst_last);
- BUG(rc < 0);
- rc = _write(&fst, sizeof(struct fst_entry), fst_kill);
- BUG(rc < 0);
-
- /* update moved fcache entry */
- memset(file, 0, sizeof(file));
- decode_edf_name(file, fst.name, fst.type);
- update_htab_entry(fst_kill, file);
- /* update cached address of moved FST */
- f_moved = file_open(file);
- if (f_moved != NULL)
- f->fst_addr = fst_kill;
-
-skip_copy:
- /* delete last entry */
- rc = _zero(fst_last, sizeof(struct fst_entry));
- BUG(rc < 0);
-
- /* if the deleted entry was the first of a block, free the block */
- if (fst_last % cmsfs.blksize == 0) {
- cache_dblocks(&walk);
- /* delete the last block from dlist */
- walk.dlist_used--;
- free_block(fst_last);
- purge_dblock_ptrs(cmsfs.dir_levels, get_fop(cmsfs.fdir));
- rewrite_dblock_ptrs(&walk);
- free_dblocks(&walk);
- }
-
- destroy_file_object(f);
- decrease_file_count();
- update_block_count();
- return 0;
-
-error:
- destroy_file_object(f);
- return rc;
-}
-
static int cmsfs_unlink(const char *path)
{
struct fst_entry fst;
--
1.7.4

View File

@ -0,0 +1,31 @@
From 62c2c000645613cb6be82f48fc641c07ca25370c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
Date: Tue, 29 Mar 2011 10:50:08 +0200
Subject: [PATCH 68/70] cmsfs-fuse: Enlarge fsname string
Description: cmsfs-fuse: Enlarge fsname string
Symptom: Truncated device part of file system name
Problem: The device part of the file system name was limited to 50
characters and gets truncated for long device names, for
instance if /dev/disk/by-path/ device names are used.
Solution: Increase the fsname string limit to 200 characters.
---
cmsfs-fuse/cmsfs-fuse.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/cmsfs-fuse/cmsfs-fuse.c b/cmsfs-fuse/cmsfs-fuse.c
index 9f1aa1a..a3a16d0 100644
--- a/cmsfs-fuse/cmsfs-fuse.c
+++ b/cmsfs-fuse/cmsfs-fuse.c
@@ -46,7 +46,7 @@ struct list text_type_list;
FILE *logfile;
#define PAGE_SIZE 0xfff
-#define FSNAME_MAX_LEN 50
+#define FSNAME_MAX_LEN 200
#define MAX_FNAME 18
#define CMSFS_OPT(t, p, v) { t, offsetof(struct cmsfs, p), v }
--
1.7.4

View File

@ -0,0 +1,62 @@
From 3a7a5e5eaec3aff2e078a91b76f09eb4ae7f8778 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
Date: Tue, 29 Mar 2011 10:50:37 +0200
Subject: [PATCH 69/70] cmsfs-fuse: Unable to use cmsfs-fuse if $HOME is not set
Description: cmsfs-fuse: Unable to use cmsfs-fuse if $HOME is not set.
Symptom: Segmentation fault while starting cmsfs-fuse.
Problem: Missing malloc if $HOME environment variable is not set.
Solution: Allocate the string buffer before the $HOME query.
---
cmsfs-fuse/config.c | 22 ++++++++++++----------
1 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/cmsfs-fuse/config.c b/cmsfs-fuse/config.c
index 9f9de45..f89e444 100644
--- a/cmsfs-fuse/config.c
+++ b/cmsfs-fuse/config.c
@@ -26,21 +26,20 @@ char *conffile;
int open_conf_file(FILE **fh)
{
- const char *home_env = getenv("HOME");
-
- if (home_env == NULL)
- goto no_home;
+ const char *home_env;
conffile = malloc(4096);
if (conffile == NULL)
DIE_PERROR("malloc failed");
+
+ home_env = getenv("HOME");
+ if (home_env == NULL)
+ goto no_home;
+
sprintf(conffile, "%s/.cmsfs-fuse/filetypes.conf", home_env);
*fh = fopen(conffile, "r");
- if (*fh == NULL)
- goto no_home;
-out:
- DEBUG("using config file: %s\n", conffile);
- return 0;
+ if (*fh != NULL)
+ goto out;
no_home:
sprintf(conffile, "%s/%s", TOOLS_SYSCONFDIR,
@@ -50,7 +49,10 @@ no_home:
free(conffile);
return -ENOENT;
}
- goto out;
+out:
+ DEBUG("using config file: %s\n", conffile);
+ free(conffile);
+ return 0;
}
void add_filetype(char *name, struct list *head)
--
1.7.4

View File

@ -0,0 +1,81 @@
From 7ec17ba524709c44561ed6016ba2940473bfa48f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
Date: Tue, 29 Mar 2011 10:51:45 +0200
Subject: [PATCH 70/70] hyptop: Prevent interactive mode on s390 line mode terminals
Description: hyptop: Prevent interactive mode on s390 line mode terminals
Symptom: Unreadable output, when hyptop is started on line mode terminals.
Problem: Check for line mode terminal is missing.
Solution: To prevent hyptop starting in interactive mode on line mode
terminals, the TERM variable is checked. If TERM is unset or
set to "dumb" interactive mode is not allowed.
---
hyptop/hyptop.8 | 8 ++++++++
hyptop/hyptop.c | 21 ++++++++++++++++++++-
2 files changed, 28 insertions(+), 1 deletions(-)
diff --git a/hyptop/hyptop.8 b/hyptop/hyptop.8
index 325613b..19c9d7c 100644
--- a/hyptop/hyptop.8
+++ b/hyptop/hyptop.8
@@ -211,3 +211,11 @@ for CPU time calculation, enter:
.br
# hyptop -t ifl,cp
+
+.SH ENVIRONMENT
+.TP
+.B TERM
+The TERM environment variable specifies your terminal type. To run
+\fBhyptop\fP in interactive mode the TERM environment variable has
+to be set. The interactive mode is not available for terminals that
+have TERM=dumb (e.g. line mode terminals).
diff --git a/hyptop/hyptop.c b/hyptop/hyptop.c
index c42e8b0..c558a21 100644
--- a/hyptop/hyptop.c
+++ b/hyptop/hyptop.c
@@ -199,6 +199,23 @@ static int l_initscr(void)
}
/*
+ * Check if terminal is able to run hyptop in curses mode
+ */
+static void l_term_check(void)
+{
+ char *term_str = getenv("TERM");
+
+ if (!term_str)
+ ERR_EXIT("Please set TERM environment variable or "
+ "try \"--batch_mode\"\n");
+
+ /* S390 line mode terminals normally have TERM=dumb */
+ if (strcmp(term_str, "dumb") == 0)
+ ERR_EXIT("Terminal of type \"dumb\" is not supported,"
+ " try \"--batch_mode\"\n");
+}
+
+/*
* Init curses
*/
static void l_term_init(void)
@@ -206,6 +223,8 @@ static void l_term_init(void)
if (g.o.batch_mode_specified)
return;
+ l_term_check();
+
if (l_initscr() == ERR)
goto fail;
if (noecho() == ERR)
@@ -221,7 +240,7 @@ static void l_term_init(void)
l_sig_handler_init();
return;
fail:
- ERR_EXIT("Could not initialize curses, try \"--batchmode\"\n");
+ ERR_EXIT("Could not initialize curses, try \"--batch_mode\"\n");
}
/*
--
1.7.4

View File

@ -0,0 +1,28 @@
From 07e1c6ff7f6deb2c35c436c5d5def61e6aac32ed Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
Date: Tue, 5 Apr 2011 14:52:24 +0200
Subject: [PATCH] cpuplugd: Fix incorrect multiplication in rules evaluation
Description: cpuplugd: Fix incorrect multiplication in rules evaluation
Symptom: Rules don't evaluate correctly when multiplication (*) is used.
Problem: Missing return statement in switch/case block.
Solution: Add return statement.
---
cpuplugd/terms.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/cpuplugd/terms.c b/cpuplugd/terms.c
index 0d08e9e..2371efa 100644
--- a/cpuplugd/terms.c
+++ b/cpuplugd/terms.c
@@ -339,6 +339,7 @@ static double eval_double(struct term *fn, struct symbols *symbols)
a = eval_double(fn->left, symbols);
b = eval_double(fn->right, symbols);
sum = a*b;
+ return sum;
/*return eval_double(fn->left, symbols) *
eval_double(fn->right, symbols);*/
case OP_DIV:
--
1.7.4

View File

@ -1,12 +1,13 @@
ACTION!="add|change", GOTO="ccw_end"
SUBSYSTEM!="ccw", GOTO="ccw_end"
SYSFS{cutype}=="1731/01", RUN+="ccw_init"
SYSFS{cutype}=="1731/05", RUN+="ccw_init"
SYSFS{cutype}=="1731/06", RUN+="ccw_init"
SYSFS{cutype}=="3088/01", RUN+="ccw_init"
SYSFS{cutype}=="3088/08", RUN+="ccw_init"
SYSFS{cutype}=="3088/60", RUN+="ccw_init"
SYSFS{cutype}=="3088/61", RUN+="ccw_init"
SYSFS{cutype}=="3088/1E", RUN+="ccw_init"
SYSFS{cutype}=="3088/1F", RUN+="ccw_init"
ATTRS{cutype}=="1731/01", RUN+="ccw_init"
ATTRS{cutype}=="1731/02", RUN+="ccw_init"
ATTRS{cutype}=="1731/05", RUN+="ccw_init"
ATTRS{cutype}=="1731/06", RUN+="ccw_init"
ATTRS{cutype}=="3088/01", RUN+="ccw_init"
ATTRS{cutype}=="3088/08", RUN+="ccw_init"
ATTRS{cutype}=="3088/60", RUN+="ccw_init"
ATTRS{cutype}=="3088/61", RUN+="ccw_init"
ATTRS{cutype}=="3088/1e", RUN+="ccw_init"
ATTRS{cutype}=="3088/1f", RUN+="ccw_init"
LABEL="ccw_end"

View File

@ -1,11 +0,0 @@
#
# free all devices on startup
#
start on starting rcS
task
console output
exec /sbin/device_cio_free

10
device_cio_free.service Normal file
View File

@ -0,0 +1,10 @@
[Unit]
Description=Free all devices on startup
DefaultDependencies=no
Before=sysinit.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/device_cio_free
StandardOutput=syslog

View File

@ -40,7 +40,7 @@ load_kernel_module()
if [ $? -ne 0 ]; then
exit 1
fi
udevsettle
udevadm settle
if [ $? -ne 0 ]; then
exit 1
fi

View File

@ -8,7 +8,7 @@ Name: s390utils
Summary: Utilities and daemons for IBM System/z
Group: System Environment/Base
Version: 1.8.2
Release: 31%{?dist}
Release: 32%{?dist}
Epoch: 2
License: GPLv2 and GPLv2+ and CPL
Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@ -32,7 +32,7 @@ Source11: cpi.sysconfig
Source12: dasd.udev
Source13: dasdconf.sh
Source14: device_cio_free
Source15: device_cio_free.conf
Source15: device_cio_free.service
Source16: ccw_init
Source17: ccw.udev
Source18: cpuplugd.initd
@ -104,6 +104,11 @@ Patch63: 0063-cmsfs-fuse-fix-read-and-write-errors-in-text-mode.patch
Patch64: 0064-switch-to-using-udevadm-settle.patch
Patch65: 0065-hyptop-Fix-man-page-typo-for-current-weight.patch
Patch66: 0066-fdasd-buffer-overflow-when-writing-to-read-only-devi.patch
Patch67: 0067-cmsfs-fuse-Delete-old-file-if-renaming-to-an-existin.patch
Patch68: 0068-cmsfs-fuse-Enlarge-fsname-string.patch
Patch69: 0069-cmsfs-fuse-Unable-to-use-cmsfs-fuse-if-HOME-is-not-s.patch
Patch70: 0070-hyptop-Prevent-interactive-mode-on-s390-line-mode-te.patch
Patch71: 0071-cpuplugd-Fix-incorrect-multiplication-in-rules-evalu.patch
Patch1000: 1000-ziomon-linker.patch
@ -335,6 +340,21 @@ be used together with the zSeries (s390) Linux kernel and device drivers.
# fdasd: buffer overflow when writing to read-only device (#688340)
%patch66 -p1 -b .fdasd-buffer-overflow
# cmsfs-fuse: Delete old file if renaming to an existing file.
%patch67 -p1 -b .cmsfs-fuse-rename-existing
# cmsfs-fuse: Enlarge fsname string
%patch68 -p1 -b .cmsfs-fuse-fsname-length
# cmsfs-fuse: Unable to use cmsfs-fuse if $HOME is not set
%patch69 -p1 -b .cmsfs-fuse-config-nohome
# hyptop: Prevent interactive mode on s390 line mode terminals
%patch70 -p1 -b .hytop-line-mode
# cpuplugd: Fix incorrect multiplication in rules evaluation (#693365)
%patch71 -p1 -b .cpuplugd-multiplication
# Fix linking with --no-add-needed
%patch1000 -p1 -b .linker
@ -494,8 +514,12 @@ for lnk in dasd zfcp znet; do
ln -sf device_cio_free ${lnk}_cio_free
done
popd
mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/init
install -p -m 644 %{SOURCE15} ${RPM_BUILD_ROOT}%{_sysconfdir}/init
mkdir -p ${RPM_BUILD_ROOT}/lib/systemd/system
mkdir -p ${RPM_BUILD_ROOT}/etc/systemd/system/sysinit.target.wants
install -p -m 644 %{SOURCE15} ${RPM_BUILD_ROOT}/lib/systemd/system
pushd ${RPM_BUILD_ROOT}/etc/systemd/system/sysinit.target.wants
ln -sf /lib/systemd/system/%{SOURCE15} %{SOURCE15}
popd
# ccw
mkdir -p ${RPM_BUILD_ROOT}/lib/udev/rules.d
@ -1097,6 +1121,16 @@ User-space development files for the s390/s390x architecture.
%changelog
* Wed Apr 27 2011 Dan Horák <dan[at]danny.cz> 2:1.8.2-32
- updated ccw udev rules
- converted cio_free_device from an upstart job to systemd unit (jstodola)
- mon_statd: switch to using udevadm settle (#688140)
- cpuplugd: Fix incorrect multiplication in rules evaluation (#693365)
- cmsfs-fuse: Delete old file if renaming to an existing file (#690505)
- cmsfs-fuse: Enlarge fsname string (#690506)
- cmsfs-fuse: Unable to use cmsfs-fuse if $HOME is not set (#690514)
- hyptop: Prevent interactive mode on s390 line mode terminals (#690810)
* Fri Mar 18 2011 Dan Horák <dhorak@redhat.com> 2:1.8.2-31
- mon_statd: switch to using udevadm settle (#688140)
- hyptop: Fix man page typo for "current weight" (#684244)