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:
parent
f7e20b2418
commit
c46bddaf55
297
0067-cmsfs-fuse-Delete-old-file-if-renaming-to-an-existin.patch
Normal file
297
0067-cmsfs-fuse-Delete-old-file-if-renaming-to-an-existin.patch
Normal 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
|
||||
|
31
0068-cmsfs-fuse-Enlarge-fsname-string.patch
Normal file
31
0068-cmsfs-fuse-Enlarge-fsname-string.patch
Normal 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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
19
ccw.udev
19
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"
|
||||
|
@ -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
10
device_cio_free.service
Normal 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
|
@ -40,7 +40,7 @@ load_kernel_module()
|
||||
if [ $? -ne 0 ]; then
|
||||
exit 1
|
||||
fi
|
||||
udevsettle
|
||||
udevadm settle
|
||||
if [ $? -ne 0 ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user