[arch-commits] Commit in dmraid/trunk (6 files)
Tobias Powalowski
tpowa at archlinux.org
Fri Jun 19 20:48:32 UTC 2009
Date: Friday, June 19, 2009 @ 16:48:32
Author: tpowa
Revision: 43102
upgpkg: dmraid 1.0.0.rc15-6
Added:
dmraid/trunk/dmraid-1.0.0.rc15-isw-raid10.patch
dmraid/trunk/dmraid-1.0.0.rc15-isw-serial.patch
dmraid/trunk/dmraid-1.0.0.rc15-rm_partitions.patch
dmraid/trunk/dmraid-1.0.0.rc15-whitespace.patch
Modified:
dmraid/trunk/PKGBUILD
dmraid/trunk/dmraid.install
---------------------------------------+
PKGBUILD | 27 ++-
dmraid-1.0.0.rc15-isw-raid10.patch | 12 +
dmraid-1.0.0.rc15-isw-serial.patch | 88 ++++++++++++
dmraid-1.0.0.rc15-rm_partitions.patch | 222 ++++++++++++++++++++++++++++++++
dmraid-1.0.0.rc15-whitespace.patch | 16 ++
dmraid.install | 24 +--
6 files changed, 370 insertions(+), 19 deletions(-)
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2009-06-19 20:48:03 UTC (rev 43101)
+++ PKGBUILD 2009-06-19 20:48:32 UTC (rev 43102)
@@ -3,24 +3,37 @@
#Contributor: Urs Wolfer <uwolfer @ fwo.ch>
pkgname=dmraid
-pkgver=1.0.0.rc14
-pkgrel=4
+pkgver=1.0.0.rc15
+pkgrel=6
pkgdesc="Device mapper RAID interface"
url="http://people.redhat.com/~heinzm/sw/dmraid/"
depends=(device-mapper)
arch=('i686' 'x86_64')
license=('GPL')
-source=(http://people.redhat.com/~heinzm/sw/dmraid/src/old/$pkgname-$pkgver.tar.bz2
+source=(http://people.redhat.com/~heinzm/sw/dmraid/src/$pkgname-$pkgver.tar.bz2
+ dmraid-1.0.0.rc15-isw-raid10.patch
+ dmraid-1.0.0.rc15-isw-serial.patch
+ dmraid-1.0.0.rc15-rm_partitions.patch
+ dmraid-1.0.0.rc15-whitespace.patch
dmraid_install
dmraid_hook)
options=(force)
install=dmraid.install
-md5sums=('a0e7d0bb5394e15c878ac86afd72c08e'
+md5sums=('2602887205a35f89b59eeba3a868150f'
+ '5a422c82e63321e65fbccb41dda70ea2'
+ '499864f61c36874c9cef69600da31b59'
+ '3d76f99972123b6efd7796bf51d543fa'
+ '0a3ec92f071a25a01753c6c34b4cb0df'
'db9a72cbf07560059d407c874f646240'
'2b2719d5bf463f411701241bba3d8120')
build() {
cd $srcdir/$pkgname/$pkgver
+ # add fedora patches
+ patch -Np1 -i ../../dmraid-1.0.0.rc15-isw-raid10.patch || return 1
+ patch -Np1 -i ../../dmraid-1.0.0.rc15-isw-serial.patch || return 1
+ patch -Np1 -i ../../dmraid-1.0.0.rc15-rm_partitions.patch || return 1
+ patch -Np1 -i ../../dmraid-1.0.0.rc15-whitespace.patch || return 1
# create static bin
./configure --enable-static_link --prefix=/usr
make || return 1
@@ -38,7 +51,7 @@
# fix .a file
chmod 644 $pkgdir/usr/lib/libdmraid.a
# fix manpage
- mkdir -p $pkgdir/usr/share/man
- mv $pkgdir/usr/man/man8 $pkgdir/usr/share/man/
- rm -rf $pkgdir/usr/man
+ #mkdir -p $pkgdir/usr/share/man
+ #mv $pkgdir/usr/man/man8 $pkgdir/usr/share/man/
+ #rm -rf $pkgdir/usr/man
}
Added: dmraid-1.0.0.rc15-isw-raid10.patch
===================================================================
--- dmraid-1.0.0.rc15-isw-raid10.patch (rev 0)
+++ dmraid-1.0.0.rc15-isw-raid10.patch 2009-06-19 20:48:32 UTC (rev 43102)
@@ -0,0 +1,12 @@
+diff -up 1.0.0.rc15/lib/format/ataraid/isw.c~ 1.0.0.rc15/lib/format/ataraid/isw.c
+--- 1.0.0.rc15/lib/format/ataraid/isw.c~ 2008-09-17 08:58:52.000000000 -0400
++++ 1.0.0.rc15/lib/format/ataraid/isw.c 2009-02-05 07:04:35.576126020 -0500
+@@ -155,7 +155,7 @@ name(struct lib_context *lc, struct raid
+
+ while (i--) {
+ if (disk == isw->disk + i) {
+- id = i % 2;
++ id = i / 2;
+ goto ok;
+ }
+ }
Added: dmraid-1.0.0.rc15-isw-serial.patch
===================================================================
--- dmraid-1.0.0.rc15-isw-serial.patch (rev 0)
+++ dmraid-1.0.0.rc15-isw-serial.patch 2009-06-19 20:48:32 UTC (rev 43102)
@@ -0,0 +1,88 @@
+diff -up 1.0.0.rc15/lib/format/ataraid/isw.c~ 1.0.0.rc15/lib/format/ataraid/isw.c
+--- 1.0.0.rc15/lib/format/ataraid/isw.c~ 2009-04-10 14:12:14.000000000 +0200
++++ 1.0.0.rc15/lib/format/ataraid/isw.c 2009-04-10 14:38:56.000000000 +0200
+@@ -81,15 +81,43 @@ is_raid10(struct isw_dev *dev)
+ }
+
+ /* Find a disk table slot by serial number. */
++static const char *dev_info_serial_to_isw(const char *di_serial)
++{
++ static char isw_serial[1024];
++
++ int i, isw_serial_len = 0;
++
++ for (i = 0; di_serial[i] && isw_serial_len < 1023; i++) {
++ if (((unsigned char)di_serial[i]) > 0x20) {
++ /* ':' is reserved for use in placeholder serial
++ * numbers for missing disks */
++ if (di_serial[i] == ':')
++ isw_serial[isw_serial_len] = ';';
++ else
++ isw_serial[isw_serial_len] = di_serial[i];
++ isw_serial_len++;
++ }
++ }
++ isw_serial[isw_serial_len] = 0;
++
++ if (isw_serial_len > MAX_RAID_SERIAL_LEN)
++ memmove(isw_serial,
++ isw_serial + (isw_serial_len - MAX_RAID_SERIAL_LEN),
++ MAX_RAID_SERIAL_LEN);
++
++ return isw_serial;
++}
++
+ static struct isw_disk *
+ _get_disk(struct isw *isw, struct dev_info *di)
+ {
+ if (di->serial) {
+ int i = isw->num_disks;
+ struct isw_disk *disk = isw->disk;
++ const char *isw_serial = dev_info_serial_to_isw(di->serial);
+
+ while (i--) {
+- if (!strncmp(di->serial, (const char *) disk[i].serial,
++ if (!strncmp(isw_serial, (const char *) disk[i].serial,
+ MAX_RAID_SERIAL_LEN))
+ return disk + i;
+ }
+@@ -866,7 +894,8 @@ rd_by_serial(struct raid_set *rs, const
+
+ list_for_each_entry(rd, &rs->devs, devs) {
+ if (rd->di &&
+- !strncmp(rd->di->serial, serial, MAX_RAID_SERIAL_LEN))
++ !strncmp(dev_info_serial_to_isw(rd->di->serial), serial,
++ MAX_RAID_SERIAL_LEN))
+ return rd;
+ }
+
+@@ -1297,7 +1326,8 @@ isw_config_disks(struct lib_context *lc,
+ struct raid_dev *rd;
+
+ list_for_each_entry(rd, &rs->devs, devs) {
+- strncpy((char *) disk[i].serial, rd->di->serial,
++ strncpy((char *) disk[i].serial,
++ dev_info_serial_to_isw(rd->di->serial),
+ MAX_RAID_SERIAL_LEN);
+ disk[i].totalBlocks = rd->di->sectors;
+
+@@ -2421,7 +2451,8 @@ update_metadata(struct lib_context *lc,
+ while (i--) {
+ /* Check if the disk is listed. */
+ list_for_each_entry(di, LC_DI(lc), list) {
+- if (!strncmp(di->serial, (const char *) disk[i].serial,
++ if (!strncmp(dev_info_serial_to_isw(di->serial),
++ (const char *) disk[i].serial,
+ MAX_RAID_SERIAL_LEN))
+ goto goon;
+ }
+@@ -2517,7 +2548,8 @@ update_metadata(struct lib_context *lc,
+ new_disk->status = CONFIG_ON_DISK |
+ DISK_SMART_EVENT_SUPPORTED |
+ CLAIMED_DISK | DETECTED_DISK | USABLE_DISK | CONFIGURED_DISK;
+- strncpy((char *) new_disk->serial, di->serial, MAX_RAID_SERIAL_LEN);
++ strncpy((char *) new_disk->serial, dev_info_serial_to_isw(di->serial),
++ MAX_RAID_SERIAL_LEN);
+
+ /* build new isw_disk array */
+ for (i = 0; i < isw->num_disks; i++) {
Added: dmraid-1.0.0.rc15-rm_partitions.patch
===================================================================
--- dmraid-1.0.0.rc15-rm_partitions.patch (rev 0)
+++ dmraid-1.0.0.rc15-rm_partitions.patch 2009-06-19 20:48:32 UTC (rev 43102)
@@ -0,0 +1,222 @@
+diff -up 1.0.0.rc15/include/dmraid/lib_context.h.rmparts 1.0.0.rc15/include/dmraid/lib_context.h
+--- 1.0.0.rc15/include/dmraid/lib_context.h.rmparts 2008-06-20 16:17:35.000000000 +0200
++++ 1.0.0.rc15/include/dmraid/lib_context.h 2009-02-13 12:03:57.000000000 +0100
+@@ -169,6 +169,7 @@ enum action {
+ PARTCHAR = 0x20000000,
+
+ #endif
++ RMPARTITIONS = 0x40000000,
+ };
+
+ /* Arguments allowed ? */
+diff -up 1.0.0.rc15/lib/Makefile.in.rmparts 1.0.0.rc15/lib/Makefile.in
+--- 1.0.0.rc15/lib/Makefile.in.rmparts 2008-06-11 15:07:04.000000000 +0200
++++ 1.0.0.rc15/lib/Makefile.in 2009-02-13 12:03:57.000000000 +0100
+@@ -12,6 +12,7 @@ SOURCES=\
+ activate/activate.c \
+ activate/devmapper.c \
+ device/ata.c \
++ device/partition.c \
+ device/scan.c \
+ device/scsi.c \
+ display/display.c \
+diff -up 1.0.0.rc15/lib/device/dev-io.h.rmparts 1.0.0.rc15/lib/device/dev-io.h
+--- 1.0.0.rc15/lib/device/dev-io.h.rmparts 2008-06-12 12:54:32.000000000 +0200
++++ 1.0.0.rc15/lib/device/dev-io.h 2009-02-13 12:03:57.000000000 +0100
+@@ -19,5 +19,6 @@
+
+ int discover_devices(struct lib_context *lc, char **devnodes);
+ int removable_device(struct lib_context *lc, char *dev_path);
++int remove_device_partitions(struct lib_context *lc, void *rs, int dummy);
+
+ #endif
+diff -up /dev/null 1.0.0.rc15/lib/device/partition.c
+--- /dev/null 2009-02-13 08:38:43.364262886 +0100
++++ 1.0.0.rc15/lib/device/partition.c 2009-02-13 12:03:57.000000000 +0100
+@@ -0,0 +1,59 @@
++/*
++ * Copyright (C) 2009 Hans de Goede <hdegoede at redhat.com>, Red Hat Inc.
++ * All rights reserved.
++ *
++ * See file LICENSE at the top of this source tree for license information.
++ */
++#include <linux/blkpg.h>
++#include <sys/ioctl.h>
++#include <errno.h>
++#include <fcntl.h>
++#include "internal.h"
++
++static int
++_remove_subset_partitions(struct lib_context *lc, struct raid_set *rs)
++{
++ struct raid_dev *rd;
++ struct blkpg_partition part = { 0, };
++ struct blkpg_ioctl_arg io = {
++ .op = BLKPG_DEL_PARTITION,
++ .datalen = sizeof(part),
++ .data = &part,
++ };
++
++ list_for_each_entry(rd, &rs->devs, devs) {
++ int fd = open(rd->di->path, O_RDWR);
++ if (fd < 0)
++ LOG_ERR(lc, 0, "opening %s: %s\n", rd->di->path,
++ strerror(errno));
++
++ /* There is no way to enumerate partitions */
++ for (part.pno = 1; part.pno <= 256; part.pno++) {
++ if (ioctl(fd, BLKPG, &io) < 0 && errno != ENXIO &&
++ (part.pno < 16 || errno != EINVAL))
++ LOG_ERR(lc, 0,
++ "removing part %d from %s: %s\n",
++ part.pno, rd->di->path,
++ strerror(errno));
++ }
++ }
++ return 1;
++}
++
++/* Remove the partition block devices (ie sda1) from block devices (ie sda)
++ used in the set, so that things like hal / blkid won't try to access the
++ disks directly */
++int
++remove_device_partitions(struct lib_context *lc, void *v, int dummy)
++{
++ struct raid_set *subset, *rs = v;
++
++ /* Recursively walk down the chain of stacked RAID sets */
++ list_for_each_entry(subset, &rs->sets, list) {
++ /* Remove partitions from devices of set below this one */
++ if (!T_GROUP(rs) && !remove_device_partitions(lc, subset, 0))
++ return 0;
++ }
++
++ return _remove_subset_partitions(lc, rs);
++}
+diff -up 1.0.0.rc15/lib/metadata/metadata.c.rmparts 1.0.0.rc15/lib/metadata/metadata.c
+--- 1.0.0.rc15/lib/metadata/metadata.c.rmparts 2008-09-17 14:58:31.000000000 +0200
++++ 1.0.0.rc15/lib/metadata/metadata.c 2009-02-13 12:03:57.000000000 +0100
+@@ -2147,6 +2147,9 @@ lib_perform(struct lib_context *lc, enum
+ if (get_metadata(lc, action, p, argv))
+ ret = p->post(lc, p->pre ? p->pre(p->arg) : p->arg);
+
++ if (ret && (RMPARTITIONS & action))
++ process_sets(lc, remove_device_partitions, 0, SETS);
++
+ if (LOCK == p->lock)
+ unlock_resource(lc, NULL);
+
+diff -up 1.0.0.rc15/man/dmraid.8.rmparts 1.0.0.rc15/man/dmraid.8
+--- 1.0.0.rc15/man/dmraid.8.rmparts 2008-06-11 15:07:20.000000000 +0200
++++ 1.0.0.rc15/man/dmraid.8 2009-02-13 12:10:11.000000000 +0100
+@@ -8,6 +8,7 @@ dmraid \- discover, configure and activa
+ [-f|--format FORMAT[,FORMAT...]]
+ [{-P|--partchar} CHAR]
+ [-p|--no_partitions]
++ [-Z|--rm_partitions]
+ [--separator SEPARATOR]
+ [-t|--test]
+ [RAID-set...]
+@@ -110,7 +111,11 @@ In case metadata format handlers are cho
+ Useful if devices have multiple metadata signatures.
+ When activating RAID sets,
+ .B -p
+-disables the activation of partitions on them.
++disables the activation of partitions on them, and
++.B -Z
++will make dmraid tell the kernel to remove the partitions from the disks
++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).
+diff -up 1.0.0.rc15/tools/commands.c.rmparts 1.0.0.rc15/tools/commands.c
+--- 1.0.0.rc15/tools/commands.c.rmparts 2008-06-20 22:25:33.000000000 +0200
++++ 1.0.0.rc15/tools/commands.c 2009-02-13 12:03:57.000000000 +0100
+@@ -38,7 +38,7 @@ static char const *short_opts = "a:hipP:
+ #endif
+ "rR:s::tv"
+ #endif
+- "VC:S::";
++ "VC:S::Z";
+
+ #ifdef HAVE_GETOPTLONG
+ static struct option long_opts[] = {
+@@ -73,6 +73,7 @@ static struct option long_opts[] = {
+ {"version", no_argument, NULL, 'V'},
+ {"create", required_argument, NULL, 'C'},
+ {"spare", optional_argument, NULL, 'S'},
++ {"rm_partitions", no_argument, NULL, 'Z'},
+ {NULL, no_argument, NULL, 0}
+ };
+ #endif /* #ifdef HAVE_GETOPTLONG */
+@@ -209,6 +210,7 @@ help(struct lib_context *lc, int arg)
+ "\t[-f|--format FORMAT[,FORMAT...]]\n"
+ "\t[-P|--partchar CHAR]\n"
+ "\t[-p|--no_partitions]\n"
++ "\t[-Z|--rm_partitions]\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);
+@@ -221,7 +223,7 @@ help(struct lib_context *lc, int arg)
+ "\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[RAID-set...]\n", c);
++ "\t[-Z|--rm_partitions] [RAID-set...]\n", c);
+ log_print(lc,
+ "%s\t{-b|--block_devices} *\n"
+ "\t[-c|--display_columns][FIELD[,FIELD...]]...\n"
+@@ -274,7 +276,7 @@ static struct actions actions[] = {
+ UNDEF, /* Set in check_activate() by mandatory option argument. */
+ UNDEF,
+ ACTIVATE | DEACTIVATE | FORMAT | HELP | IGNORELOCKING | NOPARTITIONS |
+- SEPARATOR
++ SEPARATOR | RMPARTITIONS
+ #ifndef DMRAID_MINI
+ | DBG | TEST | VERBOSE
+ #endif
+@@ -293,7 +295,8 @@ static struct actions actions[] = {
+ # endif
+ | RAID_DEVICES | RAID_SETS,
+ ACTIVE | INACTIVE | COLUMN | DBG | DUMP | DMERASE | GROUP | HELP |
+- IGNORELOCKING | NOPARTITIONS | SEPARATOR | TEST | VERBOSE
++ IGNORELOCKING | NOPARTITIONS | SEPARATOR | TEST | VERBOSE |
++ RMPARTITIONS
+ #else
+ , UNDEF
+ #endif
+@@ -310,7 +313,7 @@ static struct actions actions[] = {
+ {'P',
+ PARTCHAR,
+ ACTIVATE | DEACTIVATE,
+- FORMAT | HELP | IGNORELOCKING | SEPARATOR
++ FORMAT | HELP | IGNORELOCKING | SEPARATOR | RMPARTITIONS
+ #ifndef DMRAID_MINI
+ | DBG | TEST | VERBOSE
+ #endif
+@@ -323,7 +326,7 @@ static struct actions actions[] = {
+ {'p',
+ NOPARTITIONS,
+ ACTIVATE | DEACTIVATE,
+- FORMAT | HELP | IGNORELOCKING | SEPARATOR
++ FORMAT | HELP | IGNORELOCKING | SEPARATOR | RMPARTITIONS
+ #ifndef DMRAID_MINI
+ | DBG | TEST | VERBOSE
+ #endif
+@@ -573,6 +576,15 @@ static struct actions actions[] = {
+ check_spare_argument,
+ LC_HOT_SPARE_SET,
+ },
++ {'Z',
++ RMPARTITIONS,
++ ACTIVATE, /* We cannot undo this on DEACTIVATE ! */
++ DBG | FORMAT | HELP | IGNORELOCKING | NOPARTITIONS | VERBOSE |
++ SEPARATOR,
++ ARGS,
++ NULL,
++ 0,
++ },
+ };
+
+ /*
Added: dmraid-1.0.0.rc15-whitespace.patch
===================================================================
--- dmraid-1.0.0.rc15-whitespace.patch (rev 0)
+++ dmraid-1.0.0.rc15-whitespace.patch 2009-06-19 20:48:32 UTC (rev 43102)
@@ -0,0 +1,16 @@
+===================================================================
+RCS file: /cvs/dm/dmraid/lib/device/scsi.c,v
+retrieving revision 1.3
+retrieving revision 1.4
+diff -u -r1.3 -r1.4
+--- dmraid/lib/device/scsi.c 2008/09/19 14:31:11 1.3
++++ dmraid/lib/device/scsi.c 2008/10/31 12:22:35 1.4
+@@ -110,7 +110,7 @@
+ }
+
+ ret = ret &&
+- (di->serial = dbg_strdup((char *) &response[p->start + 1]));
++ (di->serial = dbg_strdup(remove_white_space (lc, (char *) &response[p->start + 1], serial_len)));
+ }
+
+ dbg_free(response);
Modified: dmraid.install
===================================================================
--- dmraid.install 2009-06-19 20:48:03 UTC (rev 43101)
+++ dmraid.install 2009-06-19 20:48:32 UTC (rev 43102)
@@ -1,16 +1,16 @@
post_upgrade() {
- #if [ "$(vercmp $2 1.0.0.rc15)" -lt 0 ]; then
- # # important upgrade notice
- # echo ">>>"
- # echo ">>> IMPORTANT DMRAID UPGRADE NOTICE"
- # echo ">>> -------------------------------"
- # echo ">>> Version 1.0.15rc introduce a new name scheme:"
- # echo ">>> You need to add an additional 'p' in front of your number."
- # echo ">>> e.g. <yourname><number> --> <yourname>p<number>"
- # echo ">>> firsthd1 --> firsthdp1"
- # echo ">>> Please change your bootloader and fstab accordingly."
- # echo ">>>"
- #fi
+ if [ "$(vercmp $2 1.0.0.rc15)" -lt 0 ]; then
+ # important upgrade notice
+ echo ">>>"
+ echo ">>> IMPORTANT DMRAID UPGRADE NOTICE"
+ echo ">>> -------------------------------"
+ echo ">>> Version 1.0.15rc introduce a new name scheme:"
+ echo ">>> You need to add an additional 'p' in front of your number."
+ echo ">>> e.g. <yourname><number> --> <yourname>p<number>"
+ echo ">>> firsthd1 --> firsthdp1"
+ echo ">>> Please change your bootloader and fstab accordingly."
+ echo ">>>"
+ fi
if [ "$(vercmp $2 1.0.0.rc14)" -gt 0 ]; then
# important downgrade notice
echo ">>>"
More information about the arch-commits
mailing list