diff options
| author | David S. Miller <davem@davemloft.net> | 2019-10-05 13:37:23 -0700 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2019-10-05 13:37:23 -0700 |
| commit | 6f4c930e02355664d89c976eccea5d999a90de16 (patch) | |
| tree | bc08932fbf43b9560ba5bde3284674054e3b56eb /fs/btrfs/extent_io.c | |
| parent | 26e0105550862a137eba701e2f4e3eeb343759e9 (diff) | |
| parent | 2d00aee21a5d4966e086d98f9d710afb92fb14e8 (diff) | |
| download | linux-6f4c930e02355664d89c976eccea5d999a90de16.tar.gz linux-6f4c930e02355664d89c976eccea5d999a90de16.tar.bz2 linux-6f4c930e02355664d89c976eccea5d999a90de16.zip | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Diffstat (limited to 'fs/btrfs/extent_io.c')
| -rw-r--r-- | fs/btrfs/extent_io.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 7b32b6af322d..cceaf05aada2 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -3745,12 +3745,21 @@ err_unlock: static void set_btree_ioerr(struct page *page) { struct extent_buffer *eb = (struct extent_buffer *)page->private; + struct btrfs_fs_info *fs_info; SetPageError(page); if (test_and_set_bit(EXTENT_BUFFER_WRITE_ERR, &eb->bflags)) return; /* + * If we error out, we should add back the dirty_metadata_bytes + * to make it consistent. + */ + fs_info = eb->fs_info; + percpu_counter_add_batch(&fs_info->dirty_metadata_bytes, + eb->len, fs_info->dirty_metadata_batch); + + /* * If writeback for a btree extent that doesn't belong to a log tree * failed, increment the counter transaction->eb_write_errors. * We do this because while the transaction is running and before it's @@ -3986,6 +3995,10 @@ retry: if (!ret) { free_extent_buffer(eb); continue; + } else if (ret < 0) { + done = 1; + free_extent_buffer(eb); + break; } ret = write_one_eb(eb, wbc, &epd); |
