I have question about performance on a generic block device that I have written. It's very simple device. All the block device does is register a make_request function in addtion to the normal blkdev operations. When a buffer header is received in make_request function it maps the buffer header to a new device by changing it's b_rdev to the new device number. The make request function then returns 1 allowing the kernel to send the buffer header to the correct device. Everthing seems to work fine as long as I working with one minor number. For instance, redirecting buffer_headers that are for my device say with major 212 and minor 0 to scsi device /dev/sda1. It works great I get the same read and write performance as if I was writting directly to /dev/sda1. When I try doing 2 IO streams lets say from major 212 minor 0 to scsi device /dev/sda1 and major 212 and minor 1 to scsi device /dev/sdb1. The read and write performance is half of what it was when I was reading and writting to one device. In other words the buffer headers seem to be getting serialized thru my device. When I try doing 2 IO streams directly to /dev/sda1 and /dev/sdb1 the aggergate banwidth of both IO streams is double of what it was when doing the same test to one device. This is how I would expect my generic block device to act. I have included my make request function. int test_make_request( request_queue_t * queue, int rw , struct buffer_head *bh ) { kdev_t rdev = 0; #if CONFIG_HIGHMEM bh = create_bounce(rw,bh); #endif /* Map to new device using map array */ /* the map array contains the read device number */ rdev = map[MINOR( bh->b_rdev ) ] ; if ( rdev == 0 ) { PERR(" Did not find correct device "); buffer_IO_error(bh); return 0; } /* redirect buffer header to new device */ bh->b_rdev = rdev ; /* request buffer header be sent to new device */ return 1; } thats it. I'm not holding any locks and I'm not sleeping I do not understand why the performance for this block device is so poor. Is there possibly something else that needs to be done at time of calling register_blkdev? Do I need to register a gendisk structure? Thank You don jessup donjay72@yahoo.com ===== Don Jessup Asaca/Shibasoku Corp. of America 400 Corporate Circle, Unit G Golden, CO 80401 303-278-1111 X232 donj@asaca.com http://www.asaca.com -- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/