Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'dm-4.3-fixes-4' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm

Pull device mapper fixes from Mike Snitzer:
"Three stable fixes (two in btree code used by DM thinp and one to
properly store flags in DM cache metadata's superblock)"

* tag 'dm-4.3-fixes-4' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm:
dm cache: the CLEAN_SHUTDOWN flag was not being set
dm btree: fix leak of bufio-backed block in btree_split_beneath error path
dm btree remove: fix a bug when rebalancing nodes after removal

+13 -8
+1 -1
drivers/md/dm-cache-metadata.c
··· 634 634 635 635 disk_super = dm_block_data(sblock); 636 636 637 + disk_super->flags = cpu_to_le32(cmd->flags); 637 638 if (mutator) 638 639 update_flags(disk_super, mutator); 639 640 640 - disk_super->flags = cpu_to_le32(cmd->flags); 641 641 disk_super->mapping_root = cpu_to_le64(cmd->root); 642 642 disk_super->hint_root = cpu_to_le64(cmd->hint_root); 643 643 disk_super->discard_root = cpu_to_le64(cmd->discard_root);
+11 -6
drivers/md/persistent-data/dm-btree-remove.c
··· 301 301 { 302 302 int s; 303 303 uint32_t max_entries = le32_to_cpu(left->header.max_entries); 304 - unsigned target = (nr_left + nr_center + nr_right) / 3; 305 - BUG_ON(target > max_entries); 304 + unsigned total = nr_left + nr_center + nr_right; 305 + unsigned target_right = total / 3; 306 + unsigned remainder = (target_right * 3) != total; 307 + unsigned target_left = target_right + remainder; 308 + 309 + BUG_ON(target_left > max_entries); 310 + BUG_ON(target_right > max_entries); 306 311 307 312 if (nr_left < nr_right) { 308 - s = nr_left - target; 313 + s = nr_left - target_left; 309 314 310 315 if (s < 0 && nr_center < -s) { 311 316 /* not enough in central node */ ··· 321 316 } else 322 317 shift(left, center, s); 323 318 324 - shift(center, right, target - nr_right); 319 + shift(center, right, target_right - nr_right); 325 320 326 321 } else { 327 - s = target - nr_right; 322 + s = target_right - nr_right; 328 323 if (s > 0 && nr_center < s) { 329 324 /* not enough in central node */ 330 325 shift(center, right, nr_center); ··· 334 329 } else 335 330 shift(center, right, s); 336 331 337 - shift(left, center, nr_left - target); 332 + shift(left, center, nr_left - target_left); 338 333 } 339 334 340 335 *key_ptr(parent, c->index) = center->keys[0];
+1 -1
drivers/md/persistent-data/dm-btree.c
··· 523 523 524 524 r = new_block(s->info, &right); 525 525 if (r < 0) { 526 - /* FIXME: put left */ 526 + unlock_block(s->info, left); 527 527 return r; 528 528 } 529 529