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

f2fs: move extent_node list operations being coupled with rbtree operation

This patch moves extent_node list operations to be handled together with
its rbtree operations.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>

+17 -23
+17 -23
fs/f2fs/extent_cache.c
··· 360 360 en = next_ex; 361 361 } 362 362 363 - if (en) { 364 - __try_update_largest_extent(et, en); 365 - et->cached_en = en; 366 - } 363 + if (!en) 364 + return NULL; 365 + 366 + __try_update_largest_extent(et, en); 367 + et->cached_en = en; 368 + 369 + spin_lock(&sbi->extent_lock); 370 + if (!list_empty(&en->list)) 371 + list_move_tail(&en->list, &sbi->extent_list); 372 + spin_unlock(&sbi->extent_lock); 367 373 return en; 368 374 } 369 375 ··· 406 400 407 401 __try_update_largest_extent(et, en); 408 402 et->cached_en = en; 403 + 404 + /* update in global extent list */ 405 + spin_lock(&sbi->extent_lock); 406 + list_add_tail(&en->list, &sbi->extent_list); 407 + spin_unlock(&sbi->extent_lock); 409 408 return en; 410 409 } 411 410 ··· 509 498 insert_p = NULL; 510 499 insert_parent = NULL; 511 500 } 512 - 513 - /* update in global extent list */ 514 - spin_lock(&sbi->extent_lock); 515 - if (en1) 516 - list_add_tail(&en1->list, &sbi->extent_list); 517 - spin_unlock(&sbi->extent_lock); 518 - 519 501 en = next_en; 520 502 } 521 503 ··· 516 512 if (blkaddr) { 517 513 518 514 set_extent_info(&ei, fofs, blkaddr, len); 519 - en1 = __try_merge_extent_node(sbi, et, &ei, prev_en, next_en); 520 - if (!en1) 521 - en1 = __insert_extent_tree(sbi, et, &ei, 515 + if (!__try_merge_extent_node(sbi, et, &ei, prev_en, next_en)) 516 + __insert_extent_tree(sbi, et, &ei, 522 517 insert_p, insert_parent); 523 518 524 519 /* give up extent_cache, if split and small updates happen */ ··· 527 524 et->largest.len = 0; 528 525 set_inode_flag(F2FS_I(inode), FI_NO_EXTENT); 529 526 } 530 - 531 - spin_lock(&sbi->extent_lock); 532 - if (en1) { 533 - if (list_empty(&en1->list)) 534 - list_add_tail(&en1->list, &sbi->extent_list); 535 - else 536 - list_move_tail(&en1->list, &sbi->extent_list); 537 - } 538 - spin_unlock(&sbi->extent_lock); 539 527 } 540 528 541 529 if (is_inode_flag_set(F2FS_I(inode), FI_NO_EXTENT))