#! /bin/sh
#
# mdp-makedev	Create the partitionable RAID devices in /dev/md.
#		These are dynamic, so need to be recreated after
#		every boot since the major device number can change.
#
# Version:	@(#) mdp-makedev  1.01  18-Mar-2004  miquels@cistron.nl
#

DISKMODE=660
DISKGRP=disk

umask 022

#
#	Function that creates device node based on sysfs info.
#
mkdev () {
	[ ! -f "$1/dev" ] && return
	dev=`cat $1/dev`
	name=${1##*/md_}
	major=${dev%:*}
	minor=${dev#*:}
	rm -f /dev/md/$name
	mknod -m $DISKMODE /dev/md/$name b $major $minor
	chown root:$DISKGRP /dev/md/$name
}

#
#	Mount sysfs manually if it's not there yet.
#
if [ ! -d /sys/block ]
then
	[ ! -d /sys ] && mkdir /sys
	mount -t sysfs sysfs /sys
fi

#
#	Create the /dev/md subdirectory if it wasn't present.
#
if [ ! -d /dev/md ]
then
	mkdir /dev/md
fi

#
#	First create /dev/md/d[0123]
#
if [ -f /proc/devices ]
then
	mdp_major="`sed -ne 's/^\([0-9]\+\) mdp$/\1/p' < /proc/devices`"
	if [ -n "$mdp_major" ]
	then
		minor=0
		for d in d0 d1 d2 d3
		do
			rm -f rm -f /dev/md/$d
			mknod -m $DISKMODE /dev/md/$d b $mdp_major $minor
			chown root:$DISKGRP /dev/md/$d
			minor=$(($minor+64))
		done
	fi
fi

#
#	Now create the partitions.
#
for md in /sys/block/md_d*
do
	[ ! -d "$md" ] && continue
	mkdev $md
	for p in $md/md_d*p*
	do
		[ ! -d "$p" ] && continue
		mkdev $p
	done
done

