On 03/08/2018 10:33 PM, David Sterba wrote:
All callers pass a valid pointer, we can remove the redundant checks.

Signed-off-by: David Sterba <dste...@suse.com>
---
  fs/btrfs/extent_io.c | 9 ++++++---
  1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index d00d5a59ff21..36514baa661e 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -2875,6 +2875,8 @@ __get_extent_map(struct inode *inode, struct page *page, 
size_t pg_offset,
   * handlers)
   * XXX JDM: This needs looking at to ensure proper page locking
   * return 0 on success, otherwise return error
+ *
+ * @prev_em_start:     return value of previous em start value; must be valid
   */
  static int __do_readpage(struct extent_io_tree *tree,
                         struct page *page,
@@ -2903,6 +2905,8 @@ static int __do_readpage(struct extent_io_tree *tree,
        size_t blocksize = inode->i_sb->s_blocksize;
        unsigned long this_bio_flag = 0;
+ ASSERT(prev_em_start);
+


mount is failing with this patch as in this stack below the prev_em_start is NULL.

--------
static int __extent_read_full_page(struct extent_io_tree *tree,
                                   struct page *page,
                                   get_extent_t *get_extent,
                                   struct bio **bio, int mirror_num,
                                   unsigned long *bio_flags,
                                   unsigned int read_flags)
{
::
        ret = __do_readpage(tree, page, get_extent, NULL, bio, mirror_num,
                            bio_flags, read_flags, NULL);


----------
kernel: assertion failed: prev_em_start, file: fs/btrfs/extent_io.c, line: 2911
 kernel: ------------[ cut here ]------------
 kernel: kernel BUG at fs/btrfs/ctree.h:3462!

 kernel:  __do_readpage+0x7f/0x7e0 [btrfs]
 kernel:  ? btree_fs_info+0x20/0x20 [btrfs]
 kernel:  ? mark_held_locks+0x65/0x80
 kernel:  ? _raw_spin_unlock_irq+0x29/0x40
 kernel:  __extent_read_full_page+0xe7/0x100 [btrfs]
 kernel:  ? btree_fs_info+0x20/0x20 [btrfs]
 kernel:  read_extent_buffer_pages+0x1af/0x2b0 [btrfs]
 kernel:  btree_read_extent_buffer_pages+0x4f/0xe0 [btrfs]
 kernel:  read_tree_block+0x31/0x60 [btrfs]
 kernel:  ? __raw_spin_lock_init+0x2d/0x50
 kernel:  open_ctree+0x19a2/0x25f0 [btrfs]
 kernel:  btrfs_mount_root+0x465/0x720 [btrfs]
 kernel:  ? __lockdep_init_map+0xb6/0x1d0
 kernel:  ? mount_fs+0x89/0x130
 kernel:  ? __init_waitqueue_head+0x36/0x50
 kernel:  mount_fs+0x89/0x130
 kernel:  vfs_kern_mount+0x69/0x160
---------

Thanks, Anand



        set_page_extent_mapped(page);
end = page_end;
@@ -3012,12 +3016,11 @@ static int __do_readpage(struct extent_io_tree *tree,
                 * non-optimal behavior (submitting 2 bios for the same extent).
                 */
                if (test_bit(EXTENT_FLAG_COMPRESSED, &em->flags) &&
-                   prev_em_start && *prev_em_start != (u64)-1 &&
+                   *prev_em_start != (u64)-1 &&
                    *prev_em_start != em->orig_start)
                        force_bio_submit = true;
- if (prev_em_start)
-                       *prev_em_start = em->orig_start;
+               *prev_em_start = em->orig_start;
free_extent_map(em);
                em = NULL;

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to