Problem with DISCARD and RAID5

From: NeilBrown
Date: Thu Nov 01 2012 - 02:38:22 EST



Hi Shaohua,
I've been doing some testing and discovered a problem with your discard
support for RAID5.

The code in blkdev_issue_discard assumes that the 'granularity' is a power
of 2, and for example subtracts 1 to get a mask.

However RAID5 sets the granularity to be the stripe size which often is not
a power of two. When this happens you can easily get into an infinite loop.

I suspect that to make this work properly, blkdev_issue_discard will need to
be changed to allow 'granularity' to be an arbitrary value.
When it is a power of two, the current masking can be used.
When it is anything else, it will need to use sector_div().

Could you look into this please?

Thanks,
NeilBrown

Attachment: signature.asc
Description: PGP signature