I am writing a Linux block driver for our RAID firmware, and I am
very confused about blksize_size.
The documentation simply says that blksize_size should be the size
of the block used by the device in bytes.
Now, for my device(hard disk), the only restriction is that calls
must be a multiple of 512 bytes(1 sector).
I thought the natural choice for blksize_size would be 512, but I
saw that if I make it as 512 then the upper layer breaks up all
calls into buffer heads , each of size 512.
I think that is bad for sequential performance, even though my
device has scatter gather capability.
And if I make blksize_size of a higher value(e.g 4K), then the
upper layer gives calls of 4k size even for 512 byte reads.
Making blksize_size greater than PAGE_SIZE results in kernel
panic.
I am really very confused about what blksize_size really means,
and what should be an optimum value to put in there.
One more question about clustering:
All IO requests for consecutive sectors are clustered in the same
request structure, this much I understand. My question is, does
the b_data field of the corresponding bufferheads are also
sequential in the physical memory? In other words, can I satisfy a
request if I simply transfer req->nr_sectors amount of data to
req->buffer?
-Alex
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/