diff --git a/dmraid.changes b/dmraid.changes index c4e045d..1c0386e 100644 --- a/dmraid.changes +++ b/dmraid.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Mon Apr 19 23:11:39 UTC 2010 - nfbrown@novell.com + +- handle_space: cope with arrays with spaces in the name stored + in the metadata (bnc#470696) +- remove_trylock: pthreads_mutex_trylock is still very new in + glibc so safest not to use it yet (bnc#594388) + ------------------------------------------------------------------- Tue Feb 2 03:46:18 UTC 2010 - nfbrown@novell.com diff --git a/dmraid.spec b/dmraid.spec index ec33cc1..5e4a64a 100644 --- a/dmraid.spec +++ b/dmraid.spec @@ -28,7 +28,7 @@ Group: System/Base AutoReqProv: on Summary: A Device-Mapper Software RAID Support Tool Version: 1.0.0.rc16 -Release: 1 +Release: 2 Source: ftp://people.redhat.com/heinzm/sw/dmraid/src/dmraid-%{version}.tar.bz2 Source1: sysconfig.dmraid Source2: boot.dmraid @@ -38,6 +38,8 @@ Source5: mkinitrd-boot.sh Patch1: dmraid-1.0.0.rc16-cvs-2010-02-02.patch Patch2: dmraid-1.0.0.rc13-geometry.patch Patch3: lib-install.patch +Patch4: handle_spaces +Patch5: remove_trylock BuildRoot: %{_tmppath}/%{name}-%{version}-build PreReq: %fillup_prereq @@ -72,6 +74,8 @@ Authors: %patch1 -p1 %patch2 -p1 %patch3 -p1 +%patch4 -p1 +%patch5 -p2 cp %{SOURCE3} . %build diff --git a/handle_spaces b/handle_spaces new file mode 100644 index 0000000..1348009 --- /dev/null +++ b/handle_spaces @@ -0,0 +1,73 @@ +--- + include/dmraid/misc.h | 1 + + lib/format/ataraid/isw.c | 7 ++++++- + lib/format/ddf/ddf1.c | 1 + + lib/misc/misc.c | 14 ++++++++++++++ + 4 files changed, 22 insertions(+), 1 deletion(-) + +--- 1.0.0.rc16.orig/include/dmraid/misc.h ++++ 1.0.0.rc16/include/dmraid/misc.h +@@ -18,6 +18,7 @@ extern void libdmraid_exit(struct lib_co + + extern void sysfs_workaround(struct lib_context *lc); + extern void mk_alpha(struct lib_context *lc, char *str, size_t len); ++extern void mk_alphanum(struct lib_context *lc, char *str, size_t len); + extern char *get_basename(struct lib_context *lc, char *str); + extern char *get_dirname(struct lib_context *lc, char *str); + extern char *remove_white_space(struct lib_context *lc, char *str, size_t len); +--- 1.0.0.rc16.orig/lib/format/ataraid/isw.c ++++ 1.0.0.rc16/lib/format/ataraid/isw.c +@@ -169,6 +169,7 @@ static size_t + _name(struct lib_context *lc, struct isw *isw, char *str, size_t len, + enum name_type nt, int num, struct isw_dev *dev, struct raid_dev *rd) + { ++ int n; + struct { + const char *fmt, *what; + } formats[] = { +@@ -189,7 +190,11 @@ _name(struct lib_context *lc, struct isw + f += (is_raid10(dev) ? 1 : 0); + } + +- return snprintf(str, len, f->fmt, isw->family_num, f->what, num); ++ n = snprintf(str, len, f->fmt, isw->family_num, f->what, num); ++ /* As '->volume' could contain anything, we need to sanitise the name */ ++ if (str) ++ mk_alphanum(lc, str, n); ++ return n; + } + + static char * +--- 1.0.0.rc16.orig/lib/format/ddf/ddf1.c ++++ 1.0.0.rc16/lib/format/ddf/ddf1.c +@@ -689,6 +689,7 @@ name(struct lib_context *lc, struct ddf1 + i = prefix + 16; + while (!isgraph(buf[--i])); + buf[i + 1] = 0; ++ mk_alphanum(lc, buf, i); + } else { + char *b; + +--- 1.0.0.rc16.orig/lib/misc/misc.c ++++ 1.0.0.rc16/lib/misc/misc.c +@@ -66,6 +66,20 @@ mk_alpha(struct lib_context *lc, char *s + } + } + ++/* Convert a string to only have alphanum or '-' or '_'. ++ * All others become '_' ++ */ ++void ++mk_alphanum(struct lib_context *lc, char *str, size_t len) ++{ ++ for (; len && *str; len--, str++) { ++ if (!isalnum(*str) && ++ *str != '-' && ++ *str != '_') ++ *str = '_'; ++ } ++} ++ + /* Remove any whitespace from a string. */ + char * + remove_white_space(struct lib_context *lc, char *str, size_t size) diff --git a/remove_trylock b/remove_trylock new file mode 100644 index 0000000..f7997eb --- /dev/null +++ b/remove_trylock @@ -0,0 +1,35 @@ +Remove call to pthreads_mutex_trylock + +Reference bnc +594388 +This appears only to be in very recent releases of glibc. +Its presence causes + +/sbin/dmraid -ay -p +The dynamic shared library "libdmraid-events-isw.so" could not be loaded: + /lib/libdmraid-events-isw.so: undefined symbol: pthread_mutex_trylock + +on openSUSE 11.3, it is is not used for anything except a simple +logging message. + +Signed-off-by: NeilBrown + +--- + 1.0.0.rc16/lib/events/libdmraid-events-isw.c | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) + +--- dmraid.orig/1.0.0.rc16/lib/events/libdmraid-events-isw.c ++++ dmraid/1.0.0.rc16/lib/events/libdmraid-events-isw.c +@@ -1433,11 +1433,7 @@ void process_event(struct dm_task *dmt, + /* + * Make sure, events are processed sequentially per RAID set. + */ +- if (pthread_mutex_trylock(&rs->event_mutex)) { +- syslog(LOG_NOTICE, +- " Another thread is handling an event. Waiting..."); +- pthread_mutex_lock(&rs->event_mutex); +- } ++ pthread_mutex_lock(&rs->event_mutex); + + do { + next = dm_get_next_target(dmt, next, &start, &length,