Loading fs/btrfs/disk-io.c +6 −7 Original line number Diff line number Diff line Loading @@ -442,7 +442,7 @@ static int btrfs_check_super_csum(char *raw_disk_sb) */ static int btree_read_extent_buffer_pages(struct btrfs_root *root, struct extent_buffer *eb, u64 start, u64 parent_transid) u64 parent_transid) { struct extent_io_tree *io_tree; int failed = 0; Loading @@ -454,8 +454,7 @@ static int btree_read_extent_buffer_pages(struct btrfs_root *root, clear_bit(EXTENT_BUFFER_CORRUPT, &eb->bflags); io_tree = &BTRFS_I(root->fs_info->btree_inode)->io_tree; while (1) { ret = read_extent_buffer_pages(io_tree, eb, start, WAIT_COMPLETE, ret = read_extent_buffer_pages(io_tree, eb, WAIT_COMPLETE, btree_get_extent, mirror_num); if (!ret) { if (!verify_parent_transid(io_tree, eb, Loading Loading @@ -1132,7 +1131,7 @@ void readahead_tree_block(struct btrfs_root *root, u64 bytenr) if (IS_ERR(buf)) return; read_extent_buffer_pages(&BTRFS_I(btree_inode)->io_tree, buf, 0, WAIT_NONE, btree_get_extent, 0); buf, WAIT_NONE, btree_get_extent, 0); free_extent_buffer(buf); } Loading @@ -1150,7 +1149,7 @@ int reada_tree_block_flagged(struct btrfs_root *root, u64 bytenr, set_bit(EXTENT_BUFFER_READAHEAD, &buf->bflags); ret = read_extent_buffer_pages(io_tree, buf, 0, WAIT_PAGE_LOCK, ret = read_extent_buffer_pages(io_tree, buf, WAIT_PAGE_LOCK, btree_get_extent, mirror_num); if (ret) { free_extent_buffer(buf); Loading Loading @@ -1206,7 +1205,7 @@ struct extent_buffer *read_tree_block(struct btrfs_root *root, u64 bytenr, if (IS_ERR(buf)) return buf; ret = btree_read_extent_buffer_pages(root, buf, 0, parent_transid); ret = btree_read_extent_buffer_pages(root, buf, parent_transid); if (ret) { free_extent_buffer(buf); return ERR_PTR(ret); Loading Loading @@ -4081,7 +4080,7 @@ void btrfs_btree_balance_dirty_nodelay(struct btrfs_root *root) int btrfs_read_buffer(struct extent_buffer *buf, u64 parent_transid) { struct btrfs_root *root = BTRFS_I(buf->pages[0]->mapping->host)->root; return btree_read_extent_buffer_pages(root, buf, 0, parent_transid); return btree_read_extent_buffer_pages(root, buf, parent_transid); } static int btrfs_check_super_valid(struct btrfs_fs_info *fs_info, Loading fs/btrfs/extent_io.c +8 −20 Original line number Diff line number Diff line Loading @@ -5188,11 +5188,10 @@ int extent_buffer_uptodate(struct extent_buffer *eb) } int read_extent_buffer_pages(struct extent_io_tree *tree, struct extent_buffer *eb, u64 start, int wait, struct extent_buffer *eb, int wait, get_extent_t *get_extent, int mirror_num) { unsigned long i; unsigned long start_i; struct page *page; int err; int ret = 0; Loading @@ -5206,16 +5205,8 @@ int read_extent_buffer_pages(struct extent_io_tree *tree, if (test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags)) return 0; if (start) { WARN_ON(start < eb->start); start_i = (start >> PAGE_SHIFT) - (eb->start >> PAGE_SHIFT); } else { start_i = 0; } num_pages = num_extent_pages(eb->start, eb->len); for (i = start_i; i < num_pages; i++) { for (i = 0; i < num_pages; i++) { page = eb->pages[i]; if (wait == WAIT_NONE) { if (!trylock_page(page)) Loading @@ -5230,7 +5221,7 @@ int read_extent_buffer_pages(struct extent_io_tree *tree, * the uptodate bit of our pages won't be affected by * clear_extent_buffer_uptodate(). */ for (i = start_i; i < num_pages; i++) { for (i = 0; i < num_pages; i++) { page = eb->pages[i]; if (!PageUptodate(page)) { num_reads++; Loading @@ -5239,7 +5230,6 @@ int read_extent_buffer_pages(struct extent_io_tree *tree, } if (all_uptodate) { if (start_i == 0) set_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags); goto unlock_exit; } Loading @@ -5247,7 +5237,7 @@ int read_extent_buffer_pages(struct extent_io_tree *tree, clear_bit(EXTENT_BUFFER_READ_ERR, &eb->bflags); eb->read_mirror = 0; atomic_set(&eb->io_pages, num_reads); for (i = start_i; i < num_pages; i++) { for (i = 0; i < num_pages; i++) { page = eb->pages[i]; if (!PageUptodate(page)) { Loading Loading @@ -5288,7 +5278,7 @@ int read_extent_buffer_pages(struct extent_io_tree *tree, if (ret || wait != WAIT_COMPLETE) return ret; for (i = start_i; i < num_pages; i++) { for (i = 0; i < num_pages; i++) { page = eb->pages[i]; wait_on_page_locked(page); if (!PageUptodate(page)) Loading @@ -5298,12 +5288,10 @@ int read_extent_buffer_pages(struct extent_io_tree *tree, return ret; unlock_exit: i = start_i; while (locked_pages > 0) { page = eb->pages[i]; i++; unlock_page(page); locked_pages--; page = eb->pages[locked_pages]; unlock_page(page); } return ret; } Loading fs/btrfs/extent_io.h +1 −1 Original line number Diff line number Diff line Loading @@ -359,7 +359,7 @@ void free_extent_buffer_stale(struct extent_buffer *eb); #define WAIT_COMPLETE 1 #define WAIT_PAGE_LOCK 2 int read_extent_buffer_pages(struct extent_io_tree *tree, struct extent_buffer *eb, u64 start, int wait, struct extent_buffer *eb, int wait, get_extent_t *get_extent, int mirror_num); void wait_on_extent_buffer_writeback(struct extent_buffer *eb); Loading Loading
fs/btrfs/disk-io.c +6 −7 Original line number Diff line number Diff line Loading @@ -442,7 +442,7 @@ static int btrfs_check_super_csum(char *raw_disk_sb) */ static int btree_read_extent_buffer_pages(struct btrfs_root *root, struct extent_buffer *eb, u64 start, u64 parent_transid) u64 parent_transid) { struct extent_io_tree *io_tree; int failed = 0; Loading @@ -454,8 +454,7 @@ static int btree_read_extent_buffer_pages(struct btrfs_root *root, clear_bit(EXTENT_BUFFER_CORRUPT, &eb->bflags); io_tree = &BTRFS_I(root->fs_info->btree_inode)->io_tree; while (1) { ret = read_extent_buffer_pages(io_tree, eb, start, WAIT_COMPLETE, ret = read_extent_buffer_pages(io_tree, eb, WAIT_COMPLETE, btree_get_extent, mirror_num); if (!ret) { if (!verify_parent_transid(io_tree, eb, Loading Loading @@ -1132,7 +1131,7 @@ void readahead_tree_block(struct btrfs_root *root, u64 bytenr) if (IS_ERR(buf)) return; read_extent_buffer_pages(&BTRFS_I(btree_inode)->io_tree, buf, 0, WAIT_NONE, btree_get_extent, 0); buf, WAIT_NONE, btree_get_extent, 0); free_extent_buffer(buf); } Loading @@ -1150,7 +1149,7 @@ int reada_tree_block_flagged(struct btrfs_root *root, u64 bytenr, set_bit(EXTENT_BUFFER_READAHEAD, &buf->bflags); ret = read_extent_buffer_pages(io_tree, buf, 0, WAIT_PAGE_LOCK, ret = read_extent_buffer_pages(io_tree, buf, WAIT_PAGE_LOCK, btree_get_extent, mirror_num); if (ret) { free_extent_buffer(buf); Loading Loading @@ -1206,7 +1205,7 @@ struct extent_buffer *read_tree_block(struct btrfs_root *root, u64 bytenr, if (IS_ERR(buf)) return buf; ret = btree_read_extent_buffer_pages(root, buf, 0, parent_transid); ret = btree_read_extent_buffer_pages(root, buf, parent_transid); if (ret) { free_extent_buffer(buf); return ERR_PTR(ret); Loading Loading @@ -4081,7 +4080,7 @@ void btrfs_btree_balance_dirty_nodelay(struct btrfs_root *root) int btrfs_read_buffer(struct extent_buffer *buf, u64 parent_transid) { struct btrfs_root *root = BTRFS_I(buf->pages[0]->mapping->host)->root; return btree_read_extent_buffer_pages(root, buf, 0, parent_transid); return btree_read_extent_buffer_pages(root, buf, parent_transid); } static int btrfs_check_super_valid(struct btrfs_fs_info *fs_info, Loading
fs/btrfs/extent_io.c +8 −20 Original line number Diff line number Diff line Loading @@ -5188,11 +5188,10 @@ int extent_buffer_uptodate(struct extent_buffer *eb) } int read_extent_buffer_pages(struct extent_io_tree *tree, struct extent_buffer *eb, u64 start, int wait, struct extent_buffer *eb, int wait, get_extent_t *get_extent, int mirror_num) { unsigned long i; unsigned long start_i; struct page *page; int err; int ret = 0; Loading @@ -5206,16 +5205,8 @@ int read_extent_buffer_pages(struct extent_io_tree *tree, if (test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags)) return 0; if (start) { WARN_ON(start < eb->start); start_i = (start >> PAGE_SHIFT) - (eb->start >> PAGE_SHIFT); } else { start_i = 0; } num_pages = num_extent_pages(eb->start, eb->len); for (i = start_i; i < num_pages; i++) { for (i = 0; i < num_pages; i++) { page = eb->pages[i]; if (wait == WAIT_NONE) { if (!trylock_page(page)) Loading @@ -5230,7 +5221,7 @@ int read_extent_buffer_pages(struct extent_io_tree *tree, * the uptodate bit of our pages won't be affected by * clear_extent_buffer_uptodate(). */ for (i = start_i; i < num_pages; i++) { for (i = 0; i < num_pages; i++) { page = eb->pages[i]; if (!PageUptodate(page)) { num_reads++; Loading @@ -5239,7 +5230,6 @@ int read_extent_buffer_pages(struct extent_io_tree *tree, } if (all_uptodate) { if (start_i == 0) set_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags); goto unlock_exit; } Loading @@ -5247,7 +5237,7 @@ int read_extent_buffer_pages(struct extent_io_tree *tree, clear_bit(EXTENT_BUFFER_READ_ERR, &eb->bflags); eb->read_mirror = 0; atomic_set(&eb->io_pages, num_reads); for (i = start_i; i < num_pages; i++) { for (i = 0; i < num_pages; i++) { page = eb->pages[i]; if (!PageUptodate(page)) { Loading Loading @@ -5288,7 +5278,7 @@ int read_extent_buffer_pages(struct extent_io_tree *tree, if (ret || wait != WAIT_COMPLETE) return ret; for (i = start_i; i < num_pages; i++) { for (i = 0; i < num_pages; i++) { page = eb->pages[i]; wait_on_page_locked(page); if (!PageUptodate(page)) Loading @@ -5298,12 +5288,10 @@ int read_extent_buffer_pages(struct extent_io_tree *tree, return ret; unlock_exit: i = start_i; while (locked_pages > 0) { page = eb->pages[i]; i++; unlock_page(page); locked_pages--; page = eb->pages[locked_pages]; unlock_page(page); } return ret; } Loading
fs/btrfs/extent_io.h +1 −1 Original line number Diff line number Diff line Loading @@ -359,7 +359,7 @@ void free_extent_buffer_stale(struct extent_buffer *eb); #define WAIT_COMPLETE 1 #define WAIT_PAGE_LOCK 2 int read_extent_buffer_pages(struct extent_io_tree *tree, struct extent_buffer *eb, u64 start, int wait, struct extent_buffer *eb, int wait, get_extent_t *get_extent, int mirror_num); void wait_on_extent_buffer_writeback(struct extent_buffer *eb); Loading