mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
btrfs: merge PAGE_CLEAR_DIRTY and PAGE_SET_WRITEBACK to PAGE_START_WRITEBACK
PAGE_CLEAR_DIRTY and PAGE_SET_WRITEBACK are two defines used in __process_pages_contig(), to let the function know to clear page dirty bit and then set page writeback. However page writeback and dirty bits are conflicting (at least for sector size == PAGE_SIZE case), this means these two have to be always updated together. This means we can merge PAGE_CLEAR_DIRTY and PAGE_SET_WRITEBACK to PAGE_START_WRITEBACK. Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Qu Wenruo <wqu@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
d0c2f4fa55
commit
6869b0a8be
@ -1976,10 +1976,10 @@ static int __process_pages_contig(struct address_space *mapping,
|
||||
pages_processed++;
|
||||
continue;
|
||||
}
|
||||
if (page_ops & PAGE_CLEAR_DIRTY)
|
||||
if (page_ops & PAGE_START_WRITEBACK) {
|
||||
clear_page_dirty_for_io(pages[i]);
|
||||
if (page_ops & PAGE_SET_WRITEBACK)
|
||||
set_page_writeback(pages[i]);
|
||||
}
|
||||
if (page_ops & PAGE_SET_ERROR)
|
||||
SetPageError(pages[i]);
|
||||
if (page_ops & PAGE_END_WRITEBACK)
|
||||
|
@ -35,12 +35,12 @@ enum {
|
||||
|
||||
/* these are flags for __process_pages_contig */
|
||||
#define PAGE_UNLOCK (1 << 0)
|
||||
#define PAGE_CLEAR_DIRTY (1 << 1)
|
||||
#define PAGE_SET_WRITEBACK (1 << 2)
|
||||
#define PAGE_END_WRITEBACK (1 << 3)
|
||||
#define PAGE_SET_PRIVATE2 (1 << 4)
|
||||
#define PAGE_SET_ERROR (1 << 5)
|
||||
#define PAGE_LOCK (1 << 6)
|
||||
/* Page starts writeback, clear dirty bit and set writeback bit */
|
||||
#define PAGE_START_WRITEBACK (1 << 1)
|
||||
#define PAGE_END_WRITEBACK (1 << 2)
|
||||
#define PAGE_SET_PRIVATE2 (1 << 3)
|
||||
#define PAGE_SET_ERROR (1 << 4)
|
||||
#define PAGE_LOCK (1 << 5)
|
||||
|
||||
/*
|
||||
* page->private values. Every page that is controlled by the extent
|
||||
|
@ -692,8 +692,7 @@ cont:
|
||||
NULL,
|
||||
clear_flags,
|
||||
PAGE_UNLOCK |
|
||||
PAGE_CLEAR_DIRTY |
|
||||
PAGE_SET_WRITEBACK |
|
||||
PAGE_START_WRITEBACK |
|
||||
page_error_op |
|
||||
PAGE_END_WRITEBACK);
|
||||
|
||||
@ -933,8 +932,7 @@ retry:
|
||||
async_extent->start +
|
||||
async_extent->ram_size - 1,
|
||||
NULL, EXTENT_LOCKED | EXTENT_DELALLOC,
|
||||
PAGE_UNLOCK | PAGE_CLEAR_DIRTY |
|
||||
PAGE_SET_WRITEBACK);
|
||||
PAGE_UNLOCK | PAGE_START_WRITEBACK);
|
||||
if (btrfs_submit_compressed_write(inode, async_extent->start,
|
||||
async_extent->ram_size,
|
||||
ins.objectid,
|
||||
@ -970,9 +968,8 @@ out_free:
|
||||
NULL, EXTENT_LOCKED | EXTENT_DELALLOC |
|
||||
EXTENT_DELALLOC_NEW |
|
||||
EXTENT_DEFRAG | EXTENT_DO_ACCOUNTING,
|
||||
PAGE_UNLOCK | PAGE_CLEAR_DIRTY |
|
||||
PAGE_SET_WRITEBACK | PAGE_END_WRITEBACK |
|
||||
PAGE_SET_ERROR);
|
||||
PAGE_UNLOCK | PAGE_START_WRITEBACK |
|
||||
PAGE_END_WRITEBACK | PAGE_SET_ERROR);
|
||||
free_async_extent_pages(async_extent);
|
||||
kfree(async_extent);
|
||||
goto again;
|
||||
@ -1070,8 +1067,7 @@ static noinline int cow_file_range(struct btrfs_inode *inode,
|
||||
EXTENT_LOCKED | EXTENT_DELALLOC |
|
||||
EXTENT_DELALLOC_NEW | EXTENT_DEFRAG |
|
||||
EXTENT_DO_ACCOUNTING, PAGE_UNLOCK |
|
||||
PAGE_CLEAR_DIRTY | PAGE_SET_WRITEBACK |
|
||||
PAGE_END_WRITEBACK);
|
||||
PAGE_START_WRITEBACK | PAGE_END_WRITEBACK);
|
||||
*nr_written = *nr_written +
|
||||
(end - start + PAGE_SIZE) / PAGE_SIZE;
|
||||
*page_started = 1;
|
||||
@ -1194,8 +1190,7 @@ out_reserve:
|
||||
out_unlock:
|
||||
clear_bits = EXTENT_LOCKED | EXTENT_DELALLOC | EXTENT_DELALLOC_NEW |
|
||||
EXTENT_DEFRAG | EXTENT_CLEAR_META_RESV;
|
||||
page_ops = PAGE_UNLOCK | PAGE_CLEAR_DIRTY | PAGE_SET_WRITEBACK |
|
||||
PAGE_END_WRITEBACK;
|
||||
page_ops = PAGE_UNLOCK | PAGE_START_WRITEBACK | PAGE_END_WRITEBACK;
|
||||
/*
|
||||
* If we reserved an extent for our delalloc range (or a subrange) and
|
||||
* failed to create the respective ordered extent, then it means that
|
||||
@ -1320,9 +1315,8 @@ static int cow_file_range_async(struct btrfs_inode *inode,
|
||||
unsigned clear_bits = EXTENT_LOCKED | EXTENT_DELALLOC |
|
||||
EXTENT_DELALLOC_NEW | EXTENT_DEFRAG |
|
||||
EXTENT_DO_ACCOUNTING;
|
||||
unsigned long page_ops = PAGE_UNLOCK | PAGE_CLEAR_DIRTY |
|
||||
PAGE_SET_WRITEBACK | PAGE_END_WRITEBACK |
|
||||
PAGE_SET_ERROR;
|
||||
unsigned long page_ops = PAGE_UNLOCK | PAGE_START_WRITEBACK |
|
||||
PAGE_END_WRITEBACK | PAGE_SET_ERROR;
|
||||
|
||||
extent_clear_unlock_delalloc(inode, start, end, locked_page,
|
||||
clear_bits, page_ops);
|
||||
@ -1519,8 +1513,7 @@ static noinline int run_delalloc_nocow(struct btrfs_inode *inode,
|
||||
EXTENT_LOCKED | EXTENT_DELALLOC |
|
||||
EXTENT_DO_ACCOUNTING |
|
||||
EXTENT_DEFRAG, PAGE_UNLOCK |
|
||||
PAGE_CLEAR_DIRTY |
|
||||
PAGE_SET_WRITEBACK |
|
||||
PAGE_START_WRITEBACK |
|
||||
PAGE_END_WRITEBACK);
|
||||
return -ENOMEM;
|
||||
}
|
||||
@ -1842,8 +1835,7 @@ error:
|
||||
locked_page, EXTENT_LOCKED |
|
||||
EXTENT_DELALLOC | EXTENT_DEFRAG |
|
||||
EXTENT_DO_ACCOUNTING, PAGE_UNLOCK |
|
||||
PAGE_CLEAR_DIRTY |
|
||||
PAGE_SET_WRITEBACK |
|
||||
PAGE_START_WRITEBACK |
|
||||
PAGE_END_WRITEBACK);
|
||||
btrfs_free_path(path);
|
||||
return ret;
|
||||
|
Loading…
Reference in New Issue
Block a user