package init

This commit is contained in:
eulerstorage 2019-12-31 17:23:10 +08:00
parent 17f8f9f4d8
commit 7fcf2fc3c3
20 changed files with 6780 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,21 @@
diff --git a/lib/format/ddf/ddf1.c.lsi_name b/lib/format/ddf/ddf1.c
index 05b550b..c8e484b 100644
--- a/lib/format/ddf/ddf1.c
+++ b/lib/format/ddf/ddf1.c
@@ -696,6 +696,16 @@ name(struct lib_context *lc, struct ddf1 *ddf1, struct raid_dev *rd)
sprintf(b, "%02x%02x%02x%02x",
vd->guid[i], vd->guid[i + 1],
vd->guid[i + 2], vd->guid[i + 3]);
+
+ /*
+ * Because the LSI bios changes the timestamp in the
+ * metadata on every boot, we have to neutralize it
+ * in order to allow for persistent names.
+ *
+ * Using a dummy string "47114711" for that.
+ */
+ if (!strncmp((char *) vd->guid, "LSI", 3))
+ strncpy(buf + prefix + 32, "47114711", 8);
}
out:

View File

@ -0,0 +1,15 @@
diff --git a/lib/format/ataraid/pdc.c.raid10_failure b/lib/format/ataraid/pdc.c
index b0bb652..8b14d71 100644
--- a/lib/format/ataraid/pdc.c
+++ b/lib/format/ataraid/pdc.c
@@ -490,7 +490,9 @@ devices(struct raid_dev *rd, void *context)
if (context && pdc->raid.type != PDC_T_SPAN)
*((uint64_t *) context) += rd->sectors;
- return pdc->raid.total_disks;
+ return is_raid10(pdc) ?
+ pdc->raid.total_disks / 2 :
+ pdc->raid.total_disks;
}
static int

View File

@ -0,0 +1,22 @@
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index eb8af10..4da6b64 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -2096,7 +2096,7 @@ get_metadata(struct lib_context *lc, enum action action,
if (!count_devices(lc, DEVICE)) {
log_print(lc, "no block devices found");
- return 1;
+ return 0;
}
if (!(M_RAID & p->metadata))
@@ -2118,7 +2118,7 @@ get_metadata(struct lib_context *lc, enum action action,
if (!OPT_HOT_SPARE_SET(lc) && !OPT_CREATE(lc)
&& !count_devices(lc, RAID)) {
format_error(lc, "disks", argv);
- return 1;
+ return 0;
}
if (M_SET & p->metadata) {

57
0004-fix_sil_jbod.patch Normal file
View File

@ -0,0 +1,57 @@
diff --git a/lib/format/ataraid/sil.c.fix_sil_jbod b/lib/format/ataraid/sil.c
index 6089682..8c3df38 100644
--- a/lib/format/ataraid/sil.c.fix_sil_jbod
+++ b/lib/format/ataraid/sil.c
@@ -1,8 +1,8 @@
/*
* Silicon Image Medley ATARAID metadata format handler.
*
- * Copyright (C) 2004,2005 Heinz Mauelshagen, Red Hat GmbH.
- * All rights reserved.
+ * Copyright (C) 2004,2005,2009 Heinz Mauelshagen, Red Hat GmbH.
+ * All rights reserved.
*
* See file LICENSE at the top of this source tree for license information.
*/
@@ -166,6 +166,16 @@ sil_valid(struct lib_context *lc, struct dev_info *di,
return 1;
}
+/* Return number of array sectors. */
+static uint64_t
+array_size(struct raid_dev *rd)
+{
+ struct sil *sil = META(rd, sil);
+
+ return (((uint64_t) sil->array_sectors_high) << 32) +
+ sil->array_sectors_low;
+}
+
static void
free_sils(struct sil **sils, unsigned int i)
{
@@ -381,6 +391,10 @@ devices(struct raid_dev *rd, void *context)
struct sil *sil = META(rd, sil);
switch (sil->type) {
+ case SIL_T_JBOD:
+ ret = array_size(rd) < rd->sectors ?
+ 1 : sil->drives_per_striped_set;
+ break;
case SIL_T_RAID0:
case SIL_T_RAID10:
ret = sil->drives_per_striped_set;
@@ -519,12 +533,9 @@ stripes(struct sil *sil)
static uint64_t
sectors(struct raid_dev *rd)
{
- uint64_t array_sectors, ret = 0;
+ uint64_t array_sectors = array_size(rd), ret = 0;
struct sil *sil = META(rd, sil);
- array_sectors = (((uint64_t) sil->array_sectors_high) << 32) +
- sil->array_sectors_low;
-
switch (sil->type) {
case SIL_T_SPARE:
/* Cook them up... */

31
0005-avoid_register.patch Normal file
View File

@ -0,0 +1,31 @@
diff --git a/lib/activate/activate.c.avoid_register b/lib/activate/activate.c
index 1d71ea8..86882f7 100644
--- a/lib/activate/activate.c.avoid_register
+++ b/lib/activate/activate.c
@@ -964,11 +964,13 @@ activate_subset(struct lib_context *lc, struct raid_set *rs, enum dm_what what)
{
int ret = 0;
char *table = NULL;
+ struct dmraid_format *fmt = get_format(rs);
if (T_GROUP(rs))
return 1;
- if (what == DM_REGISTER)
+ if (what == DM_REGISTER &&
+ fmt->metadata_handler)
return register_devices(lc, rs);
/* Call type handler */
@@ -1053,8 +1055,10 @@ deactivate_superset(struct lib_context *lc, struct raid_set *rs,
enum dm_what what)
{
int ret = 1, status;
+ struct dmraid_format *fmt = get_format(rs);
- if (what == DM_REGISTER)
+ if (what == DM_REGISTER &&
+ fmt->metadata_handler)
return unregister_devices(lc, rs);
status = dm_status(lc, rs);

View File

@ -0,0 +1,14 @@
diff --git a/logwatch/dmeventd.var_cache_logwatch b/logwatch/dmeventd
index 9b01676..9bc262d 100644
--- a/logwatch/dmeventd.var_cache_logwatch
+++ b/logwatch/dmeventd
@@ -36,8 +36,7 @@
# Set the location of the folder to store last time stamp
# (This is used to record the last log sent out so repeats
# are not mailed in error.)
-$syslogpattern_file =
- "/etc/logwatch/scripts/services/dmeventd_syslogpattern.txt";
+$syslogpattern_file = "/var/cache/logwatch/dmeventd/syslogpattern.txt";
if (-e $syslogpattern_file) {
open(FD, "+<", $syslogpattern_file) or die $!;

12
0007-libversion.patch Normal file
View File

@ -0,0 +1,12 @@
diff --git a/lib/version.h.libversion b/lib/version.h
index c0e4e68..ca7369b 100644
--- a/lib/version.h.libversion
+++ b/lib/version.h
@@ -1,6 +1,6 @@
#ifndef DMRAID_LIB_VERSION
-#define DMRAID_LIB_VERSION "1.0.0.rc16"
+#define DMRAID_LIB_VERSION "1"
#define DMRAID_LIB_MAJOR_VERSION 1
#define DMRAID_LIB_MINOR_VERSION 0

View File

@ -0,0 +1,43 @@
diff --git a/lib/misc/lib_context.c b/lib/misc/lib_context.c
index f1995e1..00023e7 100644
--- a/lib/misc/lib_context.c
+++ b/lib/misc/lib_context.c
@@ -138,25 +138,30 @@ init_paths(struct lib_context *lc, void *arg)
static void
init_version(struct lib_context *lc, void *arg)
{
- lc->version.text = DMRAID_LIB_VERSION;
+ static char version[80];
+
+ lc->version.text = version;
lc->version.date = DMRAID_LIB_DATE;
lc->version.v.major = DMRAID_LIB_MAJOR_VERSION;
lc->version.v.minor = DMRAID_LIB_MINOR_VERSION;
lc->version.v.sub_minor = DMRAID_LIB_SUBMINOR_VERSION;
lc->version.v.suffix = DMRAID_LIB_VERSION_SUFFIX;
+ snprintf(version, sizeof(version), "%d.%d.%d.%s",
+ lc->version.v.major, lc->version.v.minor,
+ lc->version.v.sub_minor, lc->version.v.suffix);
}
/* Put init functions into an array because of the potentially growing list. */
struct init_fn {
void (*func) (struct lib_context * lc, void *arg);
} init_fn[] = {
- {
- init_options}, {
- init_cmd}, {
- init_lists}, {
- init_mode}, {
- init_paths}, {
-init_version},};
+ { init_options},
+ { init_cmd},
+ { init_lists},
+ { init_mode},
+ { init_paths},
+ { init_version},
+};
struct lib_context *
alloc_lib_context(char **argv)

View File

@ -0,0 +1,88 @@
--- a/lib/activate/activate.c
+++ a/lib/activate/activate.c
@@ -370,7 +370,10 @@ get_dm_devs(struct raid_set *rs, int valid)
return ret + get_rds(rs, valid);
}
-/* Retrieve number of drive to rebuild from metadata format handler. */
+/* Retrieve number of drive to rebuild from metadata format handler.
+ *
+ * Returns number of drive to rebuild or -1 if there is no drive to rebuild
+ */
static int
get_rebuild_drive(struct lib_context *lc, struct raid_set *rs,
struct handler_info *info)
@@ -378,25 +381,23 @@ get_rebuild_drive(struct lib_context *lc, struct raid_set *rs,
/* Initialize drive to rebuild invalid. */
info->data.i32 = -1;
- if (lc->options[LC_REBUILD_SET].opt) {
- struct raid_dev *rd;
+ struct raid_dev *rd;
- if (list_empty(&rs->devs))
- LOG_ERR(lc, 0, "RAID set has no devices!");
+ if (list_empty(&rs->devs))
+ LOG_ERR(lc, 0, "RAID set has no devices!");
- rd = list_entry(rs->devs.next, typeof(*rd), devs);
- if (rd->fmt->metadata_handler) {
- if (!rd->
- fmt->metadata_handler(lc, GET_REBUILD_DRIVE_NO,
- info, rs))
- LOG_ERR(lc, 0, "Can't get rebuild drive #!");
- } else
- LOG_ERR(lc, 0,
- "Can't rebuild w/o metadata_handler for %s",
- rd->fmt->name);
- }
+ rd = list_entry(rs->devs.next, typeof(*rd), devs);
+ if (rd->fmt->metadata_handler) {
+ if (!rd->
+ fmt->metadata_handler(lc, GET_REBUILD_DRIVE_NO,
+ info, rs))
+ LOG_ERR(lc, 0, "Can't get rebuild drive #!");
+ } else
+ LOG_ERR(lc, 0,
+ "Can't rebuild w/o metadata_handler for %s",
+ rd->fmt->name);
- return 1;
+ return info->data.i32;
}
/* Return true if RAID set needs rebuilding. */
@@ -458,7 +459,7 @@ dm_raid1(struct lib_context *lc, char **table, struct raid_set *rs)
*/
need_sync = rs_need_sync(rs);
rebuild_drive.data.i32 = -1;
- if (need_sync && !get_rebuild_drive(lc, rs, &rebuild_drive))
+ if (need_sync && get_rebuild_drive(lc, rs, &rebuild_drive) < 0)
return 0;
if (!_dm_raid1_bol(lc, table, rs, sectors, mirrors, need_sync))
@@ -540,7 +541,7 @@ _dm_raid45_bol(struct lib_context *lc, char **table, struct raid_set *rs,
/* Get drive as rebuild target. */
rebuild_drive.data.i32 = -1;
- if (need_sync && !get_rebuild_drive(lc, rs, &rebuild_drive))
+ if (need_sync && get_rebuild_drive(lc, rs, &rebuild_drive) < 0)
return 0;
return p_fmt(lc, table, "0 %U %s core 2 %u %s %s 1 %u %u %d",
--- a/lib/format/ataraid/isw.c
+++ a/lib/format/ataraid/isw.c
@@ -1302,11 +1302,9 @@ isw_metadata_handler(struct lib_context *lc, enum handler_commands command,
case GET_REBUILD_DRIVE_NO:
rd = list_entry(rs->devs.next, typeof(*rd), devs);
isw = META(rd, isw);
- idx = rd_idx_by_name(isw, lc->options[LC_REBUILD_SET].arg.str);
- if (idx < 0)
- return 0;
- dev = raiddev(isw, idx);
+ /* Get disk to rebuild index form metadata stored on first disk */
+ dev = raiddev(isw, 0);
disk = isw->disk;
if (info) {

View File

@ -0,0 +1,176 @@
--- a/lib/events/libdmraid-events-isw.c
+++ a/lib/events/libdmraid-events-isw.c
@@ -308,6 +308,7 @@ static void __dso_dev_copy(struct dso_raid_dev *dst, struct dso_raid_dev *src)
strcpy(dst->name, src->name);
strcpy(dst->major_minor, src->major_minor);
dst->port = src->port;
+ dst->active = src->active;
}
/* Copy a struct dso_raid_dev. */
@@ -316,7 +317,7 @@ static void _dso_dev_copy(struct dso_raid_set *rs, struct dso_raid_dev *dst)
struct dso_raid_dev *src = rs->devs + rs->num_devs - 1;
if (rs->num_devs < 0)
- syslog(LOG_ERR, "Programatic error: num_devs < o");
+ syslog(LOG_ERR, "Programatic error: num_devs < 0");
if (src != dst)
__dso_dev_copy(dst, src);
@@ -595,7 +596,7 @@ static int _get_sysfs_major_minor(const char *d_name, char *major_minor,
* Retrieve device properties for @dev_name from sysfs
* (major:minor and port number) into @dev.
*
- * Return 0 for failure, 0 for success.
+ * Return 1 for failure, 0 for success.
*/
/* FIXME: straighten this by using libsysfs ? */
static int _set_raid_dev_properties(const char *dev_name,
@@ -611,11 +612,11 @@ static int _set_raid_dev_properties(const char *dev_name,
/* Get major:minor of this RAID device. */
if (_get_sysfs_major_minor(dev_name, dev->major_minor, log_type))
- return -ENOENT;
+ return 1;
dir_entries = _scandir(sys_scsi_path, &dir_ent, _scandir_dot_filter);
if (dir_entries < 0)
- return -ENOENT;
+ return 1;
/* Remember length of initial sysfs path. */
strcpy(path, sys_scsi_path);
@@ -788,8 +789,8 @@ static struct dso_raid_set *_add_raid_dev(struct dso_raid_set *rs,
grown_raid_set->devs + grown_raid_set->num_devs - 1;
if (_set_raid_dev_properties(d_name, dev, log_type)) {
- dm_free(grown_raid_set);
- return NULL;
+ /* Unable to get device properties - reset them to initial values */
+ _dso_dev_init(dev);
}
}
@@ -915,11 +916,9 @@ static struct dso_raid_set *_get_slave_devices(const char *rs_name,
/* Append to RAID sets list of RAID devices. */
rs = _add_raid_dev(rs, rs_name, d_name, log_type);
- if (!rs)
- break;
+ _check_raid_dev_active(d_name, rs->devs + rs->num_devs - 1);
dm_free(dir_ent[i]);
- _check_raid_dev_active(d_name, rs->devs + rs->num_devs - 1);
}
_destroy_dirent(dir_ent, i, dir_entries);
@@ -957,6 +956,7 @@ static struct dso_raid_set *_create_raid_set(const char *rs_name,
struct dm_task *dmt;
struct dm_info dev_info;
struct dirent *dent, **dir_ent;
+ struct dso_raid_dev *dev = NULL;
/* Get device Info. */
dmt = dm_task_create(DM_DEVICE_INFO);
@@ -1007,6 +1007,15 @@ static struct dso_raid_set *_create_raid_set(const char *rs_name,
free(dent);
}
+ /* Check if all devices are avaliable */
+ for (dev = rs->devs, i = 0; i < rs->num_devs; i++, dev++) {
+ /* If there is no major:minor number device is missing */
+ if (*dev->major_minor == '\0') {
+ /* Replace failed device with last device in set; reduce num_devs. */
+ _dso_dev_copy(rs, dev);
+ }
+ }
+
return rs;
}
@@ -1292,13 +1301,13 @@ static enum disk_state_type _process_raid45_event(struct dm_task *dmt,
dev_status_str = args[num_devs + 1];
- /* Consistency check on num_devs and status chars. */
- i = _get_num_devs_from_status(dev_status_str);
- if (i != num_devs)
- goto err;
+ /* check if is it rebuilding in progress */
+ if (strchr(dev_status_str, 'i'))
+ return D_FAILURE_NOSYNC;
+ syslog(LOG_INFO, "dev_status_str= %s", dev_status_str);
/* Check for bad raid45 devices. */
- for (i = 0, p = dev_status_str; i < rs->num_devs; i++) {
+ for (i = 0, p = dev_status_str; i <= rs->num_devs; i++) {
/* Skip past any non active/dead identifiers. */
dead = *(p++) == 'D';
while (*p && *p != 'A' && *p != 'D')
@@ -1318,7 +1327,8 @@ static enum disk_state_type _process_raid45_event(struct dm_task *dmt,
/* Copy last device in set; reduce num_devs. */
_dso_dev_copy(rs, dev);
ret = D_FAILURE_DISK;
- }
+ } else
+ ret = D_FAILURE_NOSYNC;
}
return ret;
--- a/lib/register/dmreg.c
+++ a/lib/register/dmreg.c
@@ -374,6 +374,7 @@ static int _dm_raid_state(char *dev_name)
/* Skip past raid45 target chars. */
if (status[i] != 'p' &&
status[i] != 'i' &&
+ status[i] != 'D' &&
status[i] != 'A')
errors++;
}
@@ -422,17 +423,34 @@ static int _validate_dev_and_dso_names(char *dev_name, char *dso_name)
return (dso_name && _dm_valid_dso(dso_name)) ? 1 : 0;
}
+/*
+ * Function removes unnecassary path to the DSO library
+ * (leaves only library name)
+ */
+char * dso_lib_name_prepare(char * dso_path)
+{
+ char *ptr = NULL;
+ char *lib_name = dso_path;
+
+ while (ptr = strchr(lib_name, '/'))
+ lib_name = ptr + 1;
+
+ return lib_name;
+}
+
/* Register a device to be monitored for events. */
/* FIXME: correct dev_name vs. _dm_raid_state() check of device. */
int dm_register_device(char *dev_name, char *dso_name)
{
- int errors, pending,
- ret = _validate_dev_and_dso_names(dev_name, dso_name);
+ int errors, pending,ret;
+ char *dso_lib_name = dso_lib_name_prepare(dso_name);
+
+ ret= _validate_dev_and_dso_names(dev_name, dso_lib_name);
if (ret)
return ret;
- if (dm_monitored_events(&pending, dev_name, dso_name)) {
+ if (dm_monitored_events(&pending, dev_name, dso_lib_name)) {
printf("ERROR: device \"%s\" %s\n", dev_name,
pending ? "has a registration event pending" :
"is already being monitored");
@@ -452,7 +470,7 @@ int dm_register_device(char *dev_name, char *dso_name)
return 1;
}
- if (_dm_set_events(EVENTS_REGISTER, dev_name, dso_name)) {
+ if (_dm_set_events(EVENTS_REGISTER, dev_name, dso_lib_name)) {
printf("ERROR: Unable to register a device mapper "
"event handler for device \"%s\"\n", dev_name);
return 1;

View File

@ -0,0 +1,63 @@
--- a/lib/events/libdmraid-events-isw.c
+++ a/lib/events/libdmraid-events-isw.c
@@ -101,13 +101,12 @@ enum rebuild_type { REBUILD_START, REBUILD_END };
static const char *default_dmraid_events_lib = "libdmraid-events.so";
static const char *sys_dm_dm = "dm-";
static const char *sys_block_path = "/sys/block/";
-static const char *sys_dm_path = "/sys/block/dm-";
+//static const char *sys_dm_path = "/sys/block/dm-";
static const char *sys_scsi_path = "/sys/class/scsi_device/";
static const char *sys_slaves_dir = "/slaves";
static const char *sys_scsi_dev_blk = "/device/block";
static const char sys_scsi_dev_blk_delims[] = { '/', ':' };
static const char *sys_dev_dir = "/dev";
-static const char *syslog_ident = "libdmraid-events";
/* Logging. */
enum log_type { LOG_NAMES, LOG_PORTS, LOG_OPEN_FAILURE, LOG_NONE };
@@ -1534,7 +1533,7 @@ int register_device(const char *rs_name, const char *uuid,
/* FIXME: need to run first to get syslog() to work. */
_check_sgpio();
- rs_name = basename(rs_name);
+ rs_name = basename((char *)rs_name);
/* Check for double registration attempt. */
pthread_mutex_lock(&_register_mutex);
@@ -1595,7 +1594,7 @@ int unregister_device(const char *rs_name, const char *uuid,
{
struct dso_raid_set *prev, *rs;
- rs_name = basename(rs_name);
+ rs_name = basename((char *)rs_name);
pthread_mutex_lock(&_register_mutex);
--- a/lib/format/ataraid/isw.c
+++ a/lib/format/ataraid/isw.c
@@ -1250,7 +1250,7 @@ static int
isw_metadata_handler(struct lib_context *lc, enum handler_commands command,
struct handler_info *info, void *context)
{
- int idx, ret = 0;
+ int ret = 0;
struct raid_set *rs = context;
struct raid_dev *rd = list_entry(rs->devs.next, struct raid_dev, devs);
struct isw *isw, *new_isw;
--- a/lib/register/dmreg.c
+++ a/lib/register/dmreg.c
@@ -427,12 +427,12 @@ static int _validate_dev_and_dso_names(char *dev_name, char *dso_name)
* Function removes unnecassary path to the DSO library
* (leaves only library name)
*/
-char * dso_lib_name_prepare(char * dso_path)
+char *dso_lib_name_prepare(char *dso_path)
{
char *ptr = NULL;
char *lib_name = dso_path;
- while (ptr = strchr(lib_name, '/'))
+ while ((ptr = strchr(lib_name, '/')) != NULL)
lib_name = ptr + 1;
return lib_name;

View File

@ -0,0 +1,215 @@
diff --git a/include/dmraid/lib_context.h b/include/dmraid/lib_context.h
index c2e16e6..c2b3c4d 100644
--- a/include/dmraid/lib_context.h
+++ b/include/dmraid/lib_context.h
@@ -46,7 +46,8 @@ enum lc_options {
LC_CREATE,
LC_REBUILD_SET,
LC_REBUILD_DISK,
- LC_HOT_SPARE_SET, /* Add new options below this one ! */
+ LC_HOT_SPARE_SET,
+ LC_DEFER_UPDATE, /* Add new options below this one ! */
LC_OPTIONS_SIZE, /* Must be the last enumerator. */
};
@@ -67,6 +68,7 @@ enum lc_options {
#define OPT_CREATE(lc) (lc_opt(lc, LC_CREATE))
#define OPT_HOT_SPARE_SET(lc) (lc_opt(lc, LC_HOT_SPARE_SET))
#define OPT_REBUILD_DISK(lc) (lc_opt(lc, LC_REBUILD_DISK))
+#define OPT_DEFER_UPDATE(lc) (lc_opt(lc, LC_DEFER_UPDATE))
/* Return option value. */
#define OPT_STR(lc, o) (lc->options[o].arg.str)
@@ -76,6 +78,7 @@ enum lc_options {
#define OPT_STR_PARTCHAR(lc) OPT_STR(lc, LC_PARTCHAR)
#define OPT_STR_HOT_SPARE_SET(lc) OPT_STR(lc, LC_HOT_SPARE_SET)
#define OPT_STR_REBUILD_DISK(lc) OPT_STR(lc, LC_REBUILD_DISK)
+#define OPT_STR_DEFER_UPDATE(lc) OPT_STR(lc, LC_DEFER_UPDATE)
struct lib_version {
const char *text;
diff --git a/lib/metadata/reconfig.c b/lib/metadata/reconfig.c
index 73f7604..19768a9 100644
--- a/lib/metadata/reconfig.c
+++ b/lib/metadata/reconfig.c
@@ -249,9 +249,9 @@ add_dev_to_raid(struct lib_context *lc, struct raid_set *rs,
strncat(lib_name, ".so", 3);
} else
goto err;
-
+
/* Check registration */
- if (!dm_monitored_events(&pending, sub_rs->name, lib_name)) {
+ if (!dm_monitored_events(&pending, sub_rs->name, lib_name) && !OPT_DEFER_UPDATE(lc)) {
/* If NOT registered update metadata to OK state. */
if (check_rd->fmt->metadata_handler)
check_rd->fmt->metadata_handler(lc, UPDATE_REBUILD_STATE, NULL, (void *) rs);
diff --git a/man/dmraid.8 b/man/dmraid.8
index b4de737..62a6091 100644
--- a/man/dmraid.8
+++ b/man/dmraid.8
@@ -11,6 +11,7 @@ dmraid \- discover, configure and activate software (ATA)RAID
[-Z|--rm_partitions]
[--separator SEPARATOR]
[-t|--test]
+ [-u|--update_defer]
[RAID-set...]
.B dmraid
@@ -38,6 +39,7 @@ dmraid \- discover, configure and activate software (ATA)RAID
{-R| --rebuild}
RAID-set
[device-path]
+ [-u|--update_defer]
.B dmraid
{-x| --remove}
@@ -118,7 +120,14 @@ underlying the set, ie if sda is part of the set, remove sda1, sda2, etc.
This prevents applications from directly accessiong the disks bypassing dmraid.
RAID set names given on command line don't need to be fully specified
(eg, "dmraid -ay sil" would activate all discovered Silicon Image Medley
-RAID sets).
+RAID sets). Option
+.B -u
+defers metadata update in case of rebuild is triggered parallelly with activation.
+Awoids metadata update to "OK" state if volume is not registered to the event
+monitoring.
+Useful if volume is activating at early stage of booting process when registration
+to the event monitoring is impossible.
+
.TP
.I {-b|--block_devices} [device-path...]
@@ -208,7 +217,11 @@ Use CHAR as the separator between the device name and the partition number.
.I {-R| --rebuild} RAID-set [device-path]
Rebuild raid array after a drive has failed and a new drive is added.
For Intel chipset based systems, there are two methods in which a new drive
-is added to the system.
+is added to the system. Option
+.B -u
+defers metadata update in case of rebuild is triggered.
+Awoids metadata update to "OK" state if volume is not registered to the event
+monitoring.
1. Using OROM to identify a new drive
During system reboot, enter OROM and mark the new drive as the rebuild drive.
diff --git a/tools/commands.c b/tools/commands.c
index 4c71ae1..a3c77d2 100644
--- a/tools/commands.c
+++ b/tools/commands.c
@@ -30,7 +30,7 @@ int add_dev_to_array(struct lib_context *lc, struct raid_set *rs,
/*
* Command line options.
*/
-static char const *short_opts = "a:hipP:"
+static char const *short_opts = "a:hipP:u"
#ifndef DMRAID_MINI
"bc::dDEf:glxM:"
#ifdef DMRAID_NATIVE_LOG
@@ -46,6 +46,7 @@ static struct option long_opts[] = {
{"format", required_argument, NULL, 'f'},
{"partchar", required_argument, NULL, 'P'},
{"no_partitions", no_argument, NULL, 'p'},
+ {"update_defer", no_argument, NULL, 'u'},
# ifndef DMRAID_MINI
{"block_devices", no_argument, NULL, 'b'},
{"display_columns", optional_argument, NULL, 'c'},
@@ -197,6 +198,15 @@ check_part_separator(struct lib_context *lc, int arg)
return lc_stralloc_opt(lc, LC_PARTCHAR, optarg) ? 1 : 0;
}
+/* Defer any mtadata updates in case of volume activation
+ * at early stage of OS boot */
+static int
+defer_update(struct lib_context *lc, int arg)
+{
+ lc_inc_opt(lc, arg);
+ return 1;
+}
+
/* Display help information */
static int
help(struct lib_context *lc, int arg)
@@ -211,6 +221,7 @@ help(struct lib_context *lc, int arg)
"\t[-P|--partchar CHAR]\n"
"\t[-p|--no_partitions]\n"
"\t[-Z|--rm_partitions]\n"
+ "\t[-d|--update_defer]\n"
"\t[--separator SEPARATOR]\n" "\t[RAID-set...]\n", c);
log_print(lc, "%s\t{-h|--help}\n", c);
log_print(lc, "%s\t{-V/--version}\n", c);
@@ -219,11 +230,12 @@ help(struct lib_context *lc, int arg)
log_print(lc,
"* = [-d|--debug]... [-v|--verbose]... [-i|--ignorelocking]\n");
log_print(lc,
- "%s\t{-a|--activate} {y|n|yes|no} *\n"
+ "%s\t{-a|--activate} {y|n|yes|no} \n"
"\t[-f|--format FORMAT[,FORMAT...]]\n"
"\t[-P|--partchar CHAR]\n" "\t[-p|--no_partitions]\n"
"\t[--separator SEPARATOR]\n" "\t[-t|--test]\n"
- "\t[-Z|--rm_partitions] [RAID-set...]\n", c);
+ "\t[-Z|--rm_partitions] [RAID-set...]\n"
+ "\t[-u|--update_defer]", c);
log_print(lc,
"%s\t{-b|--block_devices} *\n"
"\t[-c|--display_columns][FIELD[,FIELD...]]...\n"
@@ -255,7 +267,8 @@ help(struct lib_context *lc, int arg)
"\t[--str[i[de]] [0-9]...[kK][bB]]\n"
"\t{--disk[s] \"device-path[, device-path...\"}\n", c);
log_print(lc, "%s\t{-x|--remove RAID-set} \n");
- log_print(lc, "%s\t{-R|--rebuild} RAID-set [drive_name]\n", c);
+ log_print(lc, "%s\t{-R|--rebuild} RAID-set [drive_name]\n"
+ "\t[-u|--update_defer]", c);
log_print(lc, "%s\t[{-f|--format FORMAT}]\n"
"\t{-S|--spare [RAID-set]} \n"
"\t{-M|--media \"device-path\"}\n", c);
@@ -285,6 +298,19 @@ static struct actions actions[] = {
0,
},
+ /* Defer metadata update */
+ {'u',
+ UNDEF,
+ UNDEF,
+ ACTIVATE | REBUILD
+#ifndef DMRAID_MINI
+ | DBG | TEST | VERBOSE
+#endif
+ , NO_ARGS,
+ defer_update,
+ LC_DEFER_UPDATE,
+ },
+
/* Format option. */
{'f',
FORMAT,
@@ -726,7 +752,7 @@ handle_args(struct lib_context *lc, int argc, char ***argv)
if (o == 'C') {
*argv += optind - 1;
return 1;
- } else if (o == 'R' && argc == 4) {
+ } else if (o == 'R' && (argc == 4 || argc == 5)) {
if (*(*argv + optind))
save_drive_name(lc, *(*argv + optind));
}
@@ -744,7 +770,7 @@ handle_args(struct lib_context *lc, int argc, char ***argv)
ret = check_actions_arguments(lc);
*argv += optind;
- if (argc == 4 && lc->options[LC_REBUILD_SET].opt)
+ if ((argc == 4 || argc == 5) && lc->options[LC_REBUILD_SET].opt)
*argv += 1;
return ret;
@@ -871,7 +897,7 @@ struct prepost prepost[] = {
0,
activate_or_deactivate_sets,
},
-
+
#ifndef DMRAID_MINI
/* Display block devices. */
{BLOCK_DEVICES,
--
1.7.0.4

View File

@ -0,0 +1,17 @@
diff -purN 1.0.0.rc16.orig/tools/Makefile.in 1.0.0.rc16.new/tools/Makefile.in
--- 1.0.0.rc16.orig/tools/Makefile.in 2009-09-16 10:55:23.000000000 +0200
+++ 1.0.0.rc16.new/tools/Makefile.in 2015-07-21 14:51:42.004800788 +0200
@@ -71,11 +71,11 @@ all: $(TARGETS)
.PHONY: install_dmraid_tools remove_dmraid_tools
dmraid: $(OBJECTS) $(top_srcdir)/lib/libdmraid.a
- $(CC) -o $@ $(OBJECTS) $(LDFLAGS) -L$(top_srcdir)/lib \
+ $(CC) -o $@ $(OBJECTS) $(CFLAGS) $(LDFLAGS) -L$(top_srcdir)/lib \
-L$(DESTDIR)$(libdir) $(DMRAIDLIBS) $(DMEVENTTOOLLIBS) $(DMRAIDLIBS) $(LIBS)
dmevent_tool: $(top_srcdir)/lib/libdmraid.a
- $(CC) -o $@ $@.c $(INCLUDES) $(LDFLAGS) -L$(top_srcdir)/lib \
+ $(CC) -o $@ $@.c $(INCLUDES) $(CFLAGS) $(LDFLAGS) -L$(top_srcdir)/lib \
-L$(DESTDIR)$(libdir) $(DMRAIDLIBS) $(DMEVENTTOOLLIBS) $(DMRAIDLIBS) $(LIBS)
install_dmraid_tools: $(TARGETS)

View File

@ -0,0 +1,65 @@
lib/events/libdmraid-events-isw.c | 6 +++---
lib/format/ataraid/jm.c | 4 ++--
lib/metadata/metadata.c | 2 +-
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/lib/events/libdmraid-events-isw.c b/lib/events/libdmraid-events-isw.c
index cc78b58..9d4e902 100644
--- a/lib/events/libdmraid-events-isw.c
+++ b/lib/events/libdmraid-events-isw.c
@@ -838,13 +838,13 @@ static void _log_either(enum log_type log_type,
sz = _log_all_devs(log_type, rs, NULL, 0);
if (!sz) {
- syslog(LOG_ERR, msg[0]);
+ syslog(LOG_ERR, "%s", msg[0]);
return;
}
str = dm_malloc(++sz);
if (!str) {
- syslog(LOG_ERR, msg[1]);
+ syslog(LOG_ERR, "%s", msg[1]);
return;
}
@@ -1076,7 +1076,7 @@ static enum disk_state_type _process_stripe_event(struct dm_task *dmt,
char *params)
{
int argc, i, num_devs, ret = D_INSYNC;
- char **args, *dev_status_str, *p;
+ char **args = NULL, *dev_status_str, *p;
const char *rs_name = dm_task_get_name(dmt);
struct dso_raid_set *rs = _find_raid_set(rs_name, NULL, 1);
struct dso_raid_dev *dev;
diff --git a/lib/format/ataraid/jm.c b/lib/format/ataraid/jm.c
index 431f0de..d1e5df7 100644
--- a/lib/format/ataraid/jm.c
+++ b/lib/format/ataraid/jm.c
@@ -32,10 +32,10 @@ name(struct lib_context *lc, struct raid_dev *rd, unsigned int subset)
/* Sanitize name, make sure it's null terminated */
strncpy(buf, name, JM_NAME_LEN);
- while (i && isspace(buf[i])) {
+ i = strlen(buf);
+ while (i-- && isspace(buf[i])) {
name[i]='\0';
buf[i]='\0';
- --i;
}
len = strlen(buf) + sizeof(HANDLER) + (jm->mode == JM_T_RAID01 ? 3 : 2);
diff --git a/lib/metadata/metadata.c b/lib/metadata/metadata.c
index 4da6b64..14dc459 100644
--- a/lib/metadata/metadata.c
+++ b/lib/metadata/metadata.c
@@ -1433,7 +1433,7 @@ create_raidset(struct lib_context *lc, struct raid_set_descr *rsd)
rd->sectors = 0;
list_add_tail(&rd->devs, &rs->devs);
n++;
- } while (end++ != '\0');
+ } while (end++ != NULL);
rs->total_devs = rs->found_devs = n;
rs_tmp = rs;

View File

@ -0,0 +1,60 @@
dmraid.spec | 8 ++++----
make.tmpl.in | 4 ----
tools/Makefile.in | 4 ++--
3 files changed, 6 insertions(+), 10 deletions(-)
diff --git a/dmraid.spec b/dmraid.spec
index 681964c..5c602dc 100644
--- a/dmraid.spec
+++ b/dmraid.spec
@@ -59,12 +59,12 @@ Device failure reporting has to be activated manually by activating the
%setup -q -n dmraid/%{version}
%build
-%configure --prefix=${RPM_BUILD_ROOT}/usr --sbindir=${RPM_BUILD_ROOT}/sbin --libdir=${RPM_BUILD_ROOT}/%{_libdir} --mandir=${RPM_BUILD_ROOT}/%{_mandir} --includedir=${RPM_BUILD_ROOT}/%{_includedir} --enable-debug --enable-libselinux --enable-libsepol --enable-static_link --enable-led --enable-intel_led
-make DESTDIR=$RPM_BUILD_ROOT
+%configure --enable-debug --enable-libselinux --enable-libsepol --enable-static_link --enable-led --enable-intel_led
+make
mv tools/dmraid tools/dmraid.static
make clean
-%configure --prefix=${RPM_BUILD_ROOT}/usr --sbindir=${RPM_BUILD_ROOT}/sbin --libdir=${RPM_BUILD_ROOT}/%{_libdir} --mandir=${RPM_BUILD_ROOT}/%{_mandir} --includedir=${RPM_BUILD_ROOT}/%{_includedir} --enable-debug --enable-libselinux --enable-libsepol --disable-static_linko --enable-led --enable-intel_led
-make DESTDIR=$RPM_BUILD_ROOT
+%configure --enable-debug --enable-libselinux --enable-libsepol --disable-static_linko --enable-led --enable-intel_led
+make
%install
rm -rf $RPM_BUILD_ROOT
diff --git a/make.tmpl.in b/make.tmpl.in
index 48e5a99..2a26153 100644
--- a/make.tmpl.in
+++ b/make.tmpl.in
@@ -88,10 +88,6 @@ INCLUDES+=-I. -I$(top_srcdir)/include -I$(top_srcdir)/lib
STRIP=
-ifdef DESTDIR
- INCLUDES+=-I$(DESTDIR)/usr/include
-endif
-
DEPS=$(top_srcdir)/make.tmpl $(top_srcdir)/tools/VERSION Makefile
OBJECTS=$(SOURCES:%.c=%.o)
diff --git a/tools/Makefile.in b/tools/Makefile.in
index 0342d2a..ea2c915 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -72,11 +72,11 @@ all: $(TARGETS)
dmraid: $(OBJECTS) $(top_srcdir)/lib/libdmraid.a
$(CC) -o $@ $(OBJECTS) $(CFLAGS) $(LDFLAGS) -L$(top_srcdir)/lib \
- -L$(DESTDIR)$(libdir) $(DMRAIDLIBS) $(DMEVENTTOOLLIBS) $(DMRAIDLIBS) $(LIBS)
+ $(DMRAIDLIBS) $(DMEVENTTOOLLIBS) $(DMRAIDLIBS) $(LIBS)
dmevent_tool: $(top_srcdir)/lib/libdmraid.a
$(CC) -o $@ $@.c $(INCLUDES) $(CFLAGS) $(LDFLAGS) -L$(top_srcdir)/lib \
- -L$(DESTDIR)$(libdir) $(DMRAIDLIBS) $(DMEVENTTOOLLIBS) $(DMRAIDLIBS) $(LIBS)
+ $(DMRAIDLIBS) $(DMEVENTTOOLLIBS) $(DMRAIDLIBS) $(LIBS)
install_dmraid_tools: $(TARGETS)
@echo "Installing $(TARGETS) in $(sbindir)"; \

View File

@ -0,0 +1,34 @@
make.tmpl.in | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/make.tmpl.in b/make.tmpl.in
index 2a26153..1f1d1e5 100644
--- a/make.tmpl.in
+++ b/make.tmpl.in
@@ -23,20 +23,18 @@ SOFLAG += @SOFLAG@
# Setup directory variables
prefix = $(DESTDIR)@prefix@
exec_prefix = $(DESTDIR)@exec_prefix@
-bindir = @bindir@
+bindir = $(DESTDIR)@bindir@
ifeq ("@KLIBC@", "no")
- libdir = @libdir@
- sbindir = @sbindir@
- includedir = @includedir@
- infodir = @infodir@
- mandir = @mandir@
+ libdir = $(DESTDIR)@libdir@
+ sbindir = $(DESTDIR)@sbindir@
+ includedir = $(DESTDIR)@includedir@
else
libdir = $(DESTDIR)@KLIBC_LIB_DIR@
sbindir = $(DESTDIR)@KLIBC_SBIN_DIR@
includedir = $(DESTDIR)@KLIBC_INCLUDE_DIR@
- infodir = @infodir@
- mandir = @mandir@
endif
+infodir = $(DESTDIR)@infodir@
+mandir = $(DESTDIR)@mandir@
# setup misc variables

View File

@ -0,0 +1,17 @@
make.tmpl.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/make.tmpl.in b/make.tmpl.in
index 1f1d1e5..ef863ba 100644
--- a/make.tmpl.in
+++ b/make.tmpl.in
@@ -129,7 +129,7 @@ $(TARGETS): $(OBJECTS)
%.so: $(OBJECTS) .export.sym
%.so: $(OBJECTS)
- $(CC) -shared -Wl,-soname,$(notdir $@).$(DMRAID_LIB_VERSION) \
+ $(CC) -shared $(CFLAGS) $(LDFLAGS) -Wl,-soname,$(notdir $@).$(DMRAID_LIB_VERSION) \
-Wl,--version-script,.export.sym $(OBJECTS) -o $@ -ldevmapper-event
$(LIB_STATIC): $(OBJECTS)

BIN
dmraid-1.0.0.rc16.tar.bz2 Normal file

Binary file not shown.

408
dmraid.spec Normal file
View File

@ -0,0 +1,408 @@
#This spec file is coming from https://github.com/Distrotech/dmraid/blob/master/dmraid.spec
#
# Copyright (C) Heinz Mauelshagen, 2004-2010 Red Hat GmbH. All rights reserved.
#
# See file LICENSE at the top of this source tree for license information.
#
Summary: dmraid (Device-mapper RAID tool and library)
Name: dmraid
Version: 1.0.0.rc16
Release: 52
License: GPLv2+
Group: System Environment/Base
URL: http://people.redhat.com/heinzm/sw/dmraid
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: device-mapper-devel >= 1.02.02-2
BuildRequires: device-mapper-event-devel
BuildRequires: libselinux-devel
BuildRequires: libsepol-devel git
Requires: device-mapper >= 1.02.02-2
Requires: dmraid-events
Requires: kpartx
Requires(post): systemd
Obsoletes: dmraid-libs < %{version}-%{release}
Provides: dmraid-libs = %{version}-%{release}
Source0: ftp://people.redhat.com/heinzm/sw/dmraid/src/%{name}-%{version}.tar.bz2
Patch0: 0000-dmraid-1.0.0.rc16-test_devices.patch
Patch1: 0001-ddf1_lsi_persistent_name.patch
Patch2: 0002-pdc_raid10_failure.patch
Patch3: 0003-return_error_wo_disks.patch
Patch4: 0004-fix_sil_jbod.patch
Patch5: 0005-avoid_register.patch
Patch6: 0006-move_pattern_file_to_var.patch
Patch7: 0007-libversion.patch
Patch8: 0008-libversion-display.patch
Patch9: 0009-bz635995-data_corruption_during_activation_volume_marked_for_rebuild.patch
Patch11: 0011-bz626417_19-enabling_registration_degraded_volume.patch
Patch12: 0012-bz626417_20-cleanup_some_compilation_warning.patch
Patch13: 0013-bz626417_21-add_option_that_postpones_any_metadata_updates.patch
Patch14: 0014-dmraid-fix-build-to-honour-cflags-var.patch
Patch15: 0015-dmraid-fix-errors-and-warnings-triggered-by-CFLAGS.patch
Patch16: 0016-dmraid-fix-destdir.patch
Patch17: 0017-dmraid-fix-missing-destdir.patch
Patch18: 0018-dmraid-fix-so-flags.patch
%description
DMRAID supports RAID device discovery, RAID set activation, creation,
removal, rebuild and display of properties for ATARAID/DDF1 metadata on
Linux >= 2.4 using device-mapper.
%package -n dmraid-devel
Summary: Development libraries and headers for dmraid.
Group: Development/Libraries
Requires: dmraid = %{version}-%{release}, sgpio
%description -n dmraid-devel
dmraid-devel provides a library interface for RAID device discovery,
RAID set activation and display of properties for ATARAID volumes.
%package -n dmraid-events
Summary: dmevent_tool (Device-mapper event tool) and DSO
Group: System Environment/Base
Requires: dmraid = %{version}-%{release}, sgpio
Requires: device-mapper-event
%description -n dmraid-events
Provides a dmeventd DSO and the dmevent_tool to register devices with it
for device monitoring. All active RAID sets should be manually registered
with dmevent_tool.
%package -n dmraid-events-logwatch
Summary: dmraid logwatch-based email reporting
Group: System Environment/Base
Requires: dmraid-events = %{version}-%{release}, logwatch, /etc/cron.d
%description -n dmraid-events-logwatch
Provides device failure reporting via logwatch-based email reporting.
Device failure reporting has to be activated manually by activating the
/etc/cron.d/dmeventd-logwatch entry and by calling the dmevent_tool
(see manual page for examples) for any active RAID sets.
%prep
%autosetup -n dmraid/%{version} -p1
%build
%define _libdir /%{_lib}
%configure --prefix=/usr --sbindir=%{_sbindir} --libdir=%{_libdir} --mandir=%{_mandir} --includedir=%{_includedir} --enable-debug --disable-static_link --enable-led --enable-intel_led
make
%install
rm -rf $RPM_BUILD_ROOT
install -m 755 -d $RPM_BUILD_ROOT{%{_libdir},/sbin,%{_sbindir},%{_bindir},%{_libdir},%{_includedir}/dmraid/,/var/lock/dmraid,/etc/cron.d/,/etc/logwatch/conf/services/,/etc/logwatch/scripts/services/,/var/cache/logwatch/dmeventd/}
make DESTDIR=$RPM_BUILD_ROOT install
ln -s dmraid $RPM_BUILD_ROOT/%{_sbindir}/dmraid.static
# Provide convenience link from dmevent_tool
(cd $RPM_BUILD_ROOT/%{_sbindir} ; ln -f dmevent_tool dm_dso_reg_tool)
(cd $RPM_BUILD_ROOT/%{_mandir}/man8 ; ln -f dmevent_tool.8 dm_dso_reg_tool.8 ; ln -f dmraid.8 dmraid.static.8)
install -m 644 include/dmraid/*.h $RPM_BUILD_ROOT/%{_includedir}/dmraid/
# Install logwatch config file and script for dmeventd
install -m 644 logwatch/dmeventd.conf $RPM_BUILD_ROOT/etc/logwatch/conf/services/dmeventd.conf
install -m 755 logwatch/dmeventd $RPM_BUILD_ROOT/etc/logwatch/scripts/services/dmeventd
install -m 644 logwatch/dmeventd_cronjob.txt $RPM_BUILD_ROOT/etc/cron.d/dmeventd-logwatch
install -m 0700 /dev/null $RPM_BUILD_ROOT/var/cache/logwatch/dmeventd/syslogpattern.txt
install -d %{buildroot}%{_prefix}/lib/systemd
install -d %{buildroot}%{_unitdir}
rm -f $RPM_BUILD_ROOT/%{_libdir}/libdmraid.a
%clean
rm -rf $RPM_BUILD_ROOT
%post
/sbin/ldconfig
%postun
/sbin/ldconfig
%files
%doc CHANGELOG CREDITS KNOWN_BUGS LICENSE LICENSE_GPL LICENSE_LGPL README TODO doc/dmraid_design.txt
/%{_mandir}/man8/dmraid*
%{_sbindir}/dmraid
%{_sbindir}/dmraid.static
%{_libdir}/libdmraid.so*
%{_libdir}/libdmraid-events-isw.so*
%ghost /var/lock/dmraid
%files -n dmraid-devel
%dir %{_includedir}/dmraid
%{_includedir}/dmraid/*
%files -n dmraid-events
/%{_mandir}/man8/dmevent_tool*
/%{_mandir}/man8/dm_dso_reg_tool*
%{_sbindir}/dmevent_tool
%{_sbindir}/dm_dso_reg_tool
%files -n dmraid-events-logwatch
%config(noreplace) /etc/logwatch/*
%config(noreplace) /etc/cron.d/dmeventd-logwatch
%dir /var/cache/logwatch/dmeventd
%ghost /var/cache/logwatch/dmeventd/syslogpattern.txt
%changelog
* Tue Dec 31 2019 openEuler Buildteam <buildteam@openeuler.org> - 1.0.0.rc16-52
- Type:enhancement
- ID:NA
- SUG:NA
- DESC:delete some unused files
* Tue Oct 29 2019 zhanghaibo <ted.zhang@huawei.com> - 1.0.0.rc16-51
- add ghost tag to /var/lock/dmraid
* Wed Aug 28 2019 zhanghaibo <ted.zhang@huawei.com> - 1.0.0.rc16-50
- Type:enhancemnet
- ID:NA
- SUG:NA
- DESC:Package init
* Fri Dec 2 2011 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc16-7
- Avoid error message for sector sizes != 512 bytes
* Mon May 31 2010 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc16-6
- remove superfluous libselinux/libsepol configure options
* Tue Jan 12 2010 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc16-5
- Support DESTDIR in all Makefiles
- Fix handling spares in RAID names in vendor metadata
* Tue Jan 12 2010 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc16-4
- Change dmraid DSO version to "1" and allow for display of
extended internal library version
* Tue Jan 12 2010 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc16-3
- Add logwatch files and move pattern file to /var/cache
- Fix multiple options (eg. "-ccc") not recognized properly
* Mon Nov 2 2009 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc16-2
- Fix manual path in specfile
- fix manual pages for dmraid.static and dm_dso_reg_tool
- ddf1 metadata format handler LSI persistent name fix
- fix pdc metadata format handler to report the correct number
of devices in a RAID10 subset
- move libraries to /lib* in order to avoid catch22
with unmountable /usr
* Wed Oct 09 2008 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc16-1
- Updated
* Wed Sep 17 2008 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc15
- Added support for RAID set create/delete/rebuild and event handling
(Intel contributions)
- Resolves: rhbz#437169 rhbz#437173 rhbz#437177 rhbz#439088
* Fri Feb 08 2008 Ian Kent <ikent@redhat.com> - 1.0.0.rc15
- Bug 427550: dmraid segfaults on boot resulting in broken mirror
- patch to fix SEGV when requesting activation of invalid raid set.
the feature.
Related: rhbz#427550
* Wed Feb 06 2008 Peter Jones <pjones@redhat.com> - 1.0.0.rc13-8
- Revert fix for 381501, since the RHEL kernel doesn't currently support
the feature.
Related: rhbz#381501
* Fri Jan 18 2008 Ian Kent <ikent@redhat.com> - 1.0.0.rc13-7
- fix incorrectly applied patch in spec file.
- Related: rhbz#236891
* Wed Nov 21 2007 Ian Kent <ikent@redhat.com> - 1.0.0.rc13-6
- Bug 381511: dmraid needs to generate UUIDs for lib device-mapper
- add patch to set UUID.
- add "DMRAID-" prefix to dmraid UUID string.
- Bug 381501: dmraid needs to activate device-mapper mirror resynchronization error handling
- Resolves: rhbz#381511 rhbz#381501
* Fri Nov 2 2007 Ian Kent <ikent@redhat.com> - 1.0.0.rc13-5
- Fix SEGV on "dmraid -r -E" (bz 236891)
- Resolves: rhbz#236891
* Mon Sep 10 2007 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc13-4
- Adjusted %dist to rebuild
- Resolves: #211012
* Mon Sep 10 2007 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc13-4
- Missed a bug with dm map names
- Resolves: #211012
* Tue Jun 26 2007 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc13-3
- Fix dmraid map names
- Resolves: #211012
- Fix unaligned access messages
Resolves: #210361, #211150
- Fix jmicron name parsing (bz#219058)
* Wed Nov 8 2006 Peter Jones <pjones@redhat.com> - 1.0.0.rc13-2
- We didn't change the API or ABI, so don't change the version number
because it'll change the SONAME, which means we have to needlessly rebuild
other packages.
* Wed Nov 08 2006 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc14-1
- asr.c: fixed Adaptec HostRAID DDF1 metadata discovery (bz#211016)
- ddf1_crc.c: added crc() routine to avoid linking to zlib alltogether,
because Ubuntu had problems with this
- dropped zlib build requirement
* Thu Oct 26 2006 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc14-bz211016-1
- ddf1.c: get_size() fixed (bz#211016)
- ddf1_lib.c: ddf1_cr_off_maxpds_helper() fixed (bz#211016)
* Wed Oct 11 2006 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc13-1
- metadata.c: fixed bug returning wrang unified RAID type (bz#210085)
- pdc.c: fixed magic number check
* Sun Oct 01 2006 Jesse Keating <jkeating@redhat.com> - 1.0.0.rc12-7
- rebuilt for unwind info generation, broken in gcc-4.1.1-21
* Fri Sep 22 2006 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc12-1
- sil.c: quorate() OBO fix
- activate.c: handler() OBO fix
- added SNIA DDF1 support
- added reload functionality to devmapper.c
- added log_zero_sectors() to various metadata format handlers
- sil.[ch]: added JBOD support
* Fri Sep 1 2006 Peter Jones <pjones@redhat.com> - 1.0.0.rc11-4
- Require kpartx, so initscripts doesn't have to if you're not using dmraid
* Thu Aug 17 2006 Jesse Keating <jkeating@redhat.com> - 1.0.0.rc11-3
- Change Release to follow guidelines, and add dist tag.
* Thu Aug 17 2006 Peter Jones <pjones@redhat.com> - 1.0.0.rc11-FC6.3
- No more excludearch for s390/s390x
* Fri Jul 28 2006 Peter Jones <pjones@redhat.com> - 1.0.0.rc11-FC6.2
- Fix bounds checking on hpt37x error log
- Only build the .so, not the .a
- Fix asc.c duplication in makefile rule
* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 1.0.0.rc11-FC6.1.1
- rebuild
* Fri Jul 7 2006 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc11-FC6.1
- rebuilt for FC6 with dos partition discovery fix (#197573)
* Tue May 16 2006 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc11-FC6
- rebuilt for FC6 with better tag
* Tue May 16 2006 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc11-FC5_7.2
- rebuilt for FC5
* Tue May 16 2006 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc11-FC5_7.1
- jm.c: checksum() calculation
- misc.c: support "%d" in p_fmt and fix segfault with wrong format identifier
- nv.c: size fix in setup_rd()
- activate.c:
o striped devices could end on non-chunk boundaries
o calc_region_size() calculated too small sizes causing large
dirty logs in memory
- isw.c: set raid5 type to left asymmetric
- toollib.c: fixed 'No RAID...' message
- support selection of RAID5 allocation algorithm in metadata format handlers
- build
* Mon Mar 27 2006 Milan Broz <mbroz@redhat.com> - 1.0.0.rc10-FC5_6.2
- fixed /var/lock/dmraid in specfile (#168195)
* Fri Feb 17 2006 Heinz Mauelshagen <heinzm@redhat.com> - 1.0.0.rc10-FC5_6
- add doc/dmraid_design.txt to %doc (#181885)
- add --enable-libselinux --enable-libsepol to configure
- rebuilt
* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - 1.0.0.rc9-FC5_5.2
- bump again for double-long bug on ppc(64)
* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 1.0.0.rc9-FC5_5.1
- rebuilt for new gcc4.1 snapshot and glibc changes
* Sun Jan 22 2006 Peter Jones <pjones@redhat.com> 1.0.0.rc9-FC5_5
- Add selinux build deps
- Don't set owner during make install
* Fri Dec 9 2005 Jesse Keating <jkeating@redhat.com> 1.0.0.rc9-FC5_4.1
- rebuilt
* Sun Dec 3 2005 Peter Jones <pjones@redhat.com> 1.0.0.rc9-FC5_4
- rebuild for device-mapper-1.02.02-2
* Fri Dec 2 2005 Peter Jones <pjones@redhat.com> 1.0.0.rc9-FC5_3
- rebuild for device-mapper-1.02.02-1
* Thu Nov 10 2005 Peter Jones <pjones@redhat.com> 1.0.0.rc9-FC5_2
- update to 1.0.0.rc9
- make "make install" do the right thing with the DSO
- eliminate duplicate definitions in the headers
- export more symbols in the DSO
- add api calls to retrieve dm tables
- fix DESTDIR for 'make install'
- add api calls to identify degraded devices
- remove several arch excludes
* Sat Oct 15 2005 Florian La Roche <laroche@redhat.com>
- add -lselinux -lsepol for new device-mapper deps
* Fri May 20 2005 Heinz Mauelshagen <heinzm@redhat.com> 1.0.0.rc8-FC4_2
- specfile change to build static and dynamic binray into one package
- rebuilt
* Thu May 19 2005 Heinz Mauelshagen <heinzm@redhat.com> 1.0.0.rc8-FC4_1
- nv.c: fixed stripe size
- sil.c: avoid incarnation_no in name creation, because the Windows
driver changes it every time
- added --ignorelocking option to avoid taking out locks in early boot
where no read/write access to /var is given
* Wed Mar 16 2005 Elliot Lee <sopwith@redhat.com>
- rebuilt
* Tue Mar 15 2005 Heinz Mauelshagen <heinzm@redhat.com> 1.0.0.rc6.1-4_FC4
- VIA metadata format handler
- added RAID10 to lsi metadata format handler
- "dmraid -rD": file device size into {devicename}_{formatname}.size
- "dmraid -tay": pretty print multi-line tables ala "dmsetup table"
- "dmraid -l": display supported RAID levels + manual update
- _sil_read() used LOG_NOTICE rather than LOG_INFO in order to
avoid messages about valid metadata areas being displayed
during "dmraid -vay".
- isw, sil filed metadata offset on "-r -D" in sectors rather than in bytes.
- isw needed dev_sort() to sort RAID devices in sets correctly.
- pdc metadata format handler name creation. Lead to
wrong RAID set grouping logic in some configurations.
- pdc RAID1 size calculation fixed (rc6.1)
- dos.c: partition table code fixes by Paul Moore
- _free_dev_pointers(): fixed potential OOB error
- hpt37x_check: deal with raid_disks = 1 in mirror sets
- pdc_check: status & 0x80 doesn't always show a failed device;
removed that check for now. Status definitions needed.
- sil addition of RAID sets to global list of sets
- sil spare device memory leak
- group_set(): removal of RAID set in case of error
- hpt37x: handle total_secs > device size
- allow -p with -f
- enhanced error message by checking target type against list of
registered target types
* Fri Jan 21 2005 Alasdair Kergon <agk@redhat.com> 1.0.0.rc5f-2
- Rebuild to pick up new libdevmapper.
* Fri Nov 26 2004 Heinz Mauelshagen <heinzm@redhat.com> 1.0.0.rc5f
- specfile cleanup
* Tue Aug 20 2004 Heinz Mauelshagen <heinzm@redhat.com> 1.0.0-rc4-pre1
- Removed make flag after fixing make.tmpl.in
* Tue Aug 18 2004 Heinz Mauelshagen <heinzm@redhat.com> 1.0.0-rc3
- Added make flag to prevent make 3.80 from looping infinitely
* Thu Jun 17 2004 Heinz Mauelshagen <heinzm@redhat.com> 1.0.0-pre1
- Created