Loading fs/btrfs/TODO +1 −2 Original line number Original line Diff line number Diff line Loading @@ -6,8 +6,7 @@ * Check compat and incompat flags on the inode * Check compat and incompat flags on the inode * Get rid of struct ctree_path, limiting tree levels held at one time * Get rid of struct ctree_path, limiting tree levels held at one time * Add generation number to key pointer in nodes * Add generation number to key pointer in nodes * Add parent pointer back to extent map. * Add generation number to inode * Implement real list of pending transactions * Release * Release * Do real tree locking * Do real tree locking * Add extent mirroring (backup copies of blocks) * Add extent mirroring (backup copies of blocks) Loading fs/btrfs/extent-tree.c +17 −0 Original line number Original line Diff line number Diff line Loading @@ -291,10 +291,18 @@ static int update_block_group(struct btrfs_trans_handle *trans, return 0; return 0; } } static int try_remove_page(struct address_space *mapping, unsigned long index) { int ret; ret = invalidate_mapping_pages(mapping, index, index); return ret; } int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans, struct int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans, struct btrfs_root *root) btrfs_root *root) { { unsigned long gang[8]; unsigned long gang[8]; struct inode *btree_inode = root->fs_info->btree_inode; u64 first = 0; u64 first = 0; int ret; int ret; int i; int i; Loading @@ -309,6 +317,9 @@ int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans, struct first = gang[0]; first = gang[0]; for (i = 0; i < ret; i++) { for (i = 0; i < ret; i++) { clear_radix_bit(pinned_radix, gang[i]); clear_radix_bit(pinned_radix, gang[i]); try_remove_page(btree_inode->i_mapping, gang[i] << (PAGE_CACHE_SHIFT - btree_inode->i_blkbits)); } } } } if (root->fs_info->block_group_cache) { if (root->fs_info->block_group_cache) { Loading Loading @@ -600,6 +611,12 @@ static int find_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root */ */ btrfs_release_path(root, path); btrfs_release_path(root, path); BUG_ON(ins->objectid < search_start); BUG_ON(ins->objectid < search_start); if (ins->objectid >= btrfs_super_total_blocks(info->disk_super)) { if (search_start == 0) return -ENOSPC; search_start = 0; goto check_failed; } for (test_block = ins->objectid; for (test_block = ins->objectid; test_block < ins->objectid + num_blocks; test_block++) { test_block < ins->objectid + num_blocks; test_block++) { if (test_radix_bit(&info->pinned_radix, test_block)) { if (test_radix_bit(&info->pinned_radix, test_block)) { Loading Loading
fs/btrfs/TODO +1 −2 Original line number Original line Diff line number Diff line Loading @@ -6,8 +6,7 @@ * Check compat and incompat flags on the inode * Check compat and incompat flags on the inode * Get rid of struct ctree_path, limiting tree levels held at one time * Get rid of struct ctree_path, limiting tree levels held at one time * Add generation number to key pointer in nodes * Add generation number to key pointer in nodes * Add parent pointer back to extent map. * Add generation number to inode * Implement real list of pending transactions * Release * Release * Do real tree locking * Do real tree locking * Add extent mirroring (backup copies of blocks) * Add extent mirroring (backup copies of blocks) Loading
fs/btrfs/extent-tree.c +17 −0 Original line number Original line Diff line number Diff line Loading @@ -291,10 +291,18 @@ static int update_block_group(struct btrfs_trans_handle *trans, return 0; return 0; } } static int try_remove_page(struct address_space *mapping, unsigned long index) { int ret; ret = invalidate_mapping_pages(mapping, index, index); return ret; } int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans, struct int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans, struct btrfs_root *root) btrfs_root *root) { { unsigned long gang[8]; unsigned long gang[8]; struct inode *btree_inode = root->fs_info->btree_inode; u64 first = 0; u64 first = 0; int ret; int ret; int i; int i; Loading @@ -309,6 +317,9 @@ int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans, struct first = gang[0]; first = gang[0]; for (i = 0; i < ret; i++) { for (i = 0; i < ret; i++) { clear_radix_bit(pinned_radix, gang[i]); clear_radix_bit(pinned_radix, gang[i]); try_remove_page(btree_inode->i_mapping, gang[i] << (PAGE_CACHE_SHIFT - btree_inode->i_blkbits)); } } } } if (root->fs_info->block_group_cache) { if (root->fs_info->block_group_cache) { Loading Loading @@ -600,6 +611,12 @@ static int find_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root */ */ btrfs_release_path(root, path); btrfs_release_path(root, path); BUG_ON(ins->objectid < search_start); BUG_ON(ins->objectid < search_start); if (ins->objectid >= btrfs_super_total_blocks(info->disk_super)) { if (search_start == 0) return -ENOSPC; search_start = 0; goto check_failed; } for (test_block = ins->objectid; for (test_block = ins->objectid; test_block < ins->objectid + num_blocks; test_block++) { test_block < ins->objectid + num_blocks; test_block++) { if (test_radix_bit(&info->pinned_radix, test_block)) { if (test_radix_bit(&info->pinned_radix, test_block)) { Loading