Thread (52 messages) 52 messages, 5 authors, 2021-02-04

Re: [PATCH v5 17/18] btrfs: integrate page status update for data read path into begin/end_page_read()

From: David Sterba <hidden>
Date: 2021-02-01 15:50:08

On Wed, Jan 27, 2021 at 12:13:27PM -0500, Josef Bacik wrote:
On 1/26/21 3:34 AM, Qu Wenruo wrote:
quoted
@@ -3263,6 +3277,7 @@ int btrfs_do_readpage(struct page *page, struct extent_map **em_cached,
  		      unsigned int read_flags, u64 *prev_em_start)
  {
  	struct inode *inode = page->mapping->host;
+	struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
  	u64 start = page_offset(page);
  	const u64 end = start + PAGE_SIZE - 1;
  	u64 cur = start;
@@ -3306,6 +3321,7 @@ int btrfs_do_readpage(struct page *page, struct extent_map **em_cached,
  			kunmap_atomic(userpage);
  		}
  	}
You have two error cases above this

         ret = set_page_extent_mapped(page);
         if (ret < 0) {
                 unlock_extent(tree, start, end);
                 SetPageError(page);
                 goto out;
         }

and

         if (!PageUptodate(page)) {
                 if (cleancache_get_page(page) == 0) {
                         BUG_ON(blocksize != PAGE_SIZE);
                         unlock_extent(tree, start, end);
                         goto out;
                 }
         }

which will now leave the page locked when it errors out.  Not to mention I'm 
pretty sure you want to use btrfs_page_set_error() instead of SetPageError() in 
that first case.
Qu, please send a fixed version, just this patch, thanks.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help