block: Fix overrun in lcm() and move it to lib
authorMartin K. Petersen <martin.petersen@oracle.com>
Mon, 15 Mar 2010 11:46:51 +0000 (12:46 +0100)
committerJens Axboe <jens.axboe@oracle.com>
Mon, 15 Mar 2010 11:47:59 +0000 (12:47 +0100)
commit2cda2728aa1c8c006418a24f867b25e5eb7a32e2
treec23ec7c38d74237646c5453d96bfbbea4cadfee7
parentf11c9c5c259cb2c3d698548dc3936f773ab1f5b9
block: Fix overrun in lcm() and move it to lib

lcm() was defined to take integer-sized arguments.  The supplied
arguments are multiplied, however, causing us to overflow given
sufficiently large input.  That in turn led to incorrect optimal I/O
size reporting in some cases (RAID over RAID).

Switch lcm() over to unsigned long similar to gcd() and move the
function from blk-settings.c to lib.

Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
block/blk-settings.c
include/linux/lcm.h [new file with mode: 0644]
lib/Makefile
lib/lcm.c [new file with mode: 0644]