I'm writing a simple block dev driver to overcome some limitations with porting a previously hardware based RAID array to linux's software raid (mdadm).

This driver will create it's own block device, but proxy r/w requests to 1 or more other block devices (much like mdadm does already).

What is the best way for one kernel mode driver to read and write to another kernel mode (block device) driver?

[EDIT1]:

Ok, looking through the mdadm kernel module code - it looks like we need to do as the kernel does - use generic_make_request to the other disk drivers that handle the disks in the 'volume'. This avoids any user-mode filesystem block devices (/dev/xyz) to kernel mode device driver translations and keeps the I/O completely in kernel mode.

Now... How to obtain the bio handle from the several /dev/xyz strings passed to my module....

[EDIT2]:

Looking at this the wrong way, need to give my driver Major/Minors (translate the /dev/xyz in usermode and hand the dev_t value via ioctl to the driver, from there it can reference the driver.

Well on my way here, but still open to suggestions/recommendations.

有帮助吗?

解决方案

The answer was to modify the BIO and re-send it off as I've done in this post:

https://unix.stackexchange.com/questions/171800/hp-smartarray-raid5-recovery-on-linux/171801#171801

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top