mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
libdm: Improve raid segment parameter handling.
This commit is contained in:
parent
192d9ad977
commit
96a6210198
@ -2370,6 +2370,20 @@ static int _mirror_emit_segment_line(struct dm_task *dmt, struct load_segment *s
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Is parameter non-zero? */
|
||||
#define PARAM_IS_SET(p) (p) ? 1 : 0
|
||||
|
||||
/* Return number of bits assuming 4 * 64 bit size */
|
||||
static int _get_params_count(uint64_t bits)
|
||||
{
|
||||
int r = 0;
|
||||
|
||||
r += 2 * hweight32(bits & 0xFFFFFFFF);
|
||||
r += 2 * hweight32(bits >> 32);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
static int _raid_emit_segment_line(struct dm_task *dmt, uint32_t major,
|
||||
uint32_t minor, struct load_segment *seg,
|
||||
uint64_t *seg_start, char *params,
|
||||
@ -2382,25 +2396,11 @@ static int _raid_emit_segment_line(struct dm_task *dmt, uint32_t major,
|
||||
if ((seg->flags & DM_NOSYNC) || (seg->flags & DM_FORCESYNC))
|
||||
param_count++;
|
||||
|
||||
if (seg->region_size)
|
||||
param_count += 2;
|
||||
param_count += 2 * (PARAM_IS_SET(seg->region_size) + PARAM_IS_SET(seg->writebehind) +
|
||||
PARAM_IS_SET(seg->min_recovery_rate) + PARAM_IS_SET(seg->max_recovery_rate));
|
||||
|
||||
if (seg->writebehind)
|
||||
param_count += 2;
|
||||
|
||||
if (seg->min_recovery_rate)
|
||||
param_count += 2;
|
||||
|
||||
if (seg->max_recovery_rate)
|
||||
param_count += 2;
|
||||
|
||||
/* rebuilds is 64-bit */
|
||||
param_count += 2 * hweight32(seg->rebuilds & 0xFFFFFFFF);
|
||||
param_count += 2 * hweight32(seg->rebuilds >> 32);
|
||||
|
||||
/* rebuilds is 64-bit */
|
||||
param_count += 2 * hweight32(seg->writemostly & 0xFFFFFFFF);
|
||||
param_count += 2 * hweight32(seg->writemostly >> 32);
|
||||
param_count += _get_params_count(seg->rebuilds);
|
||||
param_count += _get_params_count(seg->writemostly);
|
||||
|
||||
if ((seg->type == SEG_RAID1) && seg->stripe_size)
|
||||
log_error("WARNING: Ignoring RAID1 stripe size");
|
||||
|
Loading…
Reference in New Issue
Block a user