diff --git a/0067-cmsfs-fuse-Delete-old-file-if-renaming-to-an-existin.patch b/0067-cmsfs-fuse-Delete-old-file-if-renaming-to-an-existin.patch new file mode 100644 index 0000000..0dbfc02 --- /dev/null +++ b/0067-cmsfs-fuse-Delete-old-file-if-renaming-to-an-existin.patch @@ -0,0 +1,297 @@ +From f6494a1210439d591a1319498026ffcdd91a2ebf Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Dan=20Hor=C3=A1k?= +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 + diff --git a/0068-cmsfs-fuse-Enlarge-fsname-string.patch b/0068-cmsfs-fuse-Enlarge-fsname-string.patch new file mode 100644 index 0000000..8802f4e --- /dev/null +++ b/0068-cmsfs-fuse-Enlarge-fsname-string.patch @@ -0,0 +1,31 @@ +From 62c2c000645613cb6be82f48fc641c07ca25370c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Dan=20Hor=C3=A1k?= +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 + diff --git a/0069-cmsfs-fuse-Unable-to-use-cmsfs-fuse-if-HOME-is-not-s.patch b/0069-cmsfs-fuse-Unable-to-use-cmsfs-fuse-if-HOME-is-not-s.patch new file mode 100644 index 0000000..eabdc02 --- /dev/null +++ b/0069-cmsfs-fuse-Unable-to-use-cmsfs-fuse-if-HOME-is-not-s.patch @@ -0,0 +1,62 @@ +From 3a7a5e5eaec3aff2e078a91b76f09eb4ae7f8778 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Dan=20Hor=C3=A1k?= +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 + diff --git a/0070-hyptop-Prevent-interactive-mode-on-s390-line-mode-te.patch b/0070-hyptop-Prevent-interactive-mode-on-s390-line-mode-te.patch new file mode 100644 index 0000000..e416b9e --- /dev/null +++ b/0070-hyptop-Prevent-interactive-mode-on-s390-line-mode-te.patch @@ -0,0 +1,81 @@ +From 7ec17ba524709c44561ed6016ba2940473bfa48f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Dan=20Hor=C3=A1k?= +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 + diff --git a/0071-cpuplugd-Fix-incorrect-multiplication-in-rules-evalu.patch b/0071-cpuplugd-Fix-incorrect-multiplication-in-rules-evalu.patch new file mode 100644 index 0000000..61cae2a --- /dev/null +++ b/0071-cpuplugd-Fix-incorrect-multiplication-in-rules-evalu.patch @@ -0,0 +1,28 @@ +From 07e1c6ff7f6deb2c35c436c5d5def61e6aac32ed Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Dan=20Hor=C3=A1k?= +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 + diff --git a/ccw.udev b/ccw.udev index 2c6a805..a12ad05 100644 --- a/ccw.udev +++ b/ccw.udev @@ -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" diff --git a/device_cio_free.conf b/device_cio_free.conf deleted file mode 100644 index 8d61531..0000000 --- a/device_cio_free.conf +++ /dev/null @@ -1,11 +0,0 @@ -# -# free all devices on startup -# - -start on starting rcS - -task - -console output - -exec /sbin/device_cio_free diff --git a/device_cio_free.service b/device_cio_free.service new file mode 100644 index 0000000..b5d7e24 --- /dev/null +++ b/device_cio_free.service @@ -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 diff --git a/mon_statd.initd b/mon_statd.initd index 089572b..9754bd5 100644 --- a/mon_statd.initd +++ b/mon_statd.initd @@ -40,7 +40,7 @@ load_kernel_module() if [ $? -ne 0 ]; then exit 1 fi - udevsettle + udevadm settle if [ $? -ne 0 ]; then exit 1 fi diff --git a/s390utils.spec b/s390utils.spec index 588fcb8..0498d47 100644 --- a/s390utils.spec +++ b/s390utils.spec @@ -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 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 2:1.8.2-31 - mon_statd: switch to using udevadm settle (#688140) - hyptop: Fix man page typo for "current weight" (#684244)