Merge branch 'for-linus' of git://git.kernel.dk/linux-block
Pull block layer fix from Jens Axboe: "Just one patch in this pull request, fixing a regression caused by a 'mathematically correct' change to lcm()" * 'for-linus' of git://git.kernel.dk/linux-block: block: fix blk_stack_limits() regression due to lcm() change
This commit is contained in:
Коммит
57a9d89dc0
|
@ -585,7 +585,7 @@ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
|
|||
b->physical_block_size);
|
||||
|
||||
t->io_min = max(t->io_min, b->io_min);
|
||||
t->io_opt = lcm(t->io_opt, b->io_opt);
|
||||
t->io_opt = lcm_not_zero(t->io_opt, b->io_opt);
|
||||
|
||||
t->cluster &= b->cluster;
|
||||
t->discard_zeroes_data &= b->discard_zeroes_data;
|
||||
|
@ -616,7 +616,7 @@ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
|
|||
b->raid_partial_stripes_expensive);
|
||||
|
||||
/* Find lowest common alignment_offset */
|
||||
t->alignment_offset = lcm(t->alignment_offset, alignment)
|
||||
t->alignment_offset = lcm_not_zero(t->alignment_offset, alignment)
|
||||
% max(t->physical_block_size, t->io_min);
|
||||
|
||||
/* Verify that new alignment_offset is on a logical block boundary */
|
||||
|
@ -643,7 +643,7 @@ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
|
|||
b->max_discard_sectors);
|
||||
t->discard_granularity = max(t->discard_granularity,
|
||||
b->discard_granularity);
|
||||
t->discard_alignment = lcm(t->discard_alignment, alignment) %
|
||||
t->discard_alignment = lcm_not_zero(t->discard_alignment, alignment) %
|
||||
t->discard_granularity;
|
||||
}
|
||||
|
||||
|
|
|
@ -4,5 +4,6 @@
|
|||
#include <linux/compiler.h>
|
||||
|
||||
unsigned long lcm(unsigned long a, unsigned long b) __attribute_const__;
|
||||
unsigned long lcm_not_zero(unsigned long a, unsigned long b) __attribute_const__;
|
||||
|
||||
#endif /* _LCM_H */
|
||||
|
|
11
lib/lcm.c
11
lib/lcm.c
|
@ -12,3 +12,14 @@ unsigned long lcm(unsigned long a, unsigned long b)
|
|||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(lcm);
|
||||
|
||||
unsigned long lcm_not_zero(unsigned long a, unsigned long b)
|
||||
{
|
||||
unsigned long l = lcm(a, b);
|
||||
|
||||
if (l)
|
||||
return l;
|
||||
|
||||
return (b ? : a);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(lcm_not_zero);
|
||||
|
|
Загрузка…
Ссылка в новой задаче