mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 23:32:14 +00:00
Merge branch 'for-4.14-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux
Pull btrfs fixes from David Sterba: "We've collected a bunch of isolated fixes, for crashes, user-visible behaviour or missing bits from other subsystem cleanups from the past. The overall number is not small but I was not able to make it significantly smaller. Most of the patches are supposed to go to stable" * 'for-4.14-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux: btrfs: log csums for all modified extents Btrfs: fix unexpected result when dio reading corrupted blocks btrfs: Report error on removing qgroup if del_qgroup_item fails Btrfs: skip checksum when reading compressed data if some IO have failed Btrfs: fix kernel oops while reading compressed data Btrfs: use btrfs_op instead of bio_op in __btrfs_map_block Btrfs: do not backup tree roots when fsync btrfs: remove BTRFS_FS_QUOTA_DISABLING flag btrfs: propagate error to btrfs_cmp_data_prepare caller btrfs: prevent to set invalid default subvolid Btrfs: send: fix error number for unknown inode types btrfs: fix NULL pointer dereference from free_reloc_roots() btrfs: finish ordered extent cleaning if no progress is found btrfs: clear ordered flag on cleaning up ordered extents Btrfs: fix incorrect {node,sector}size endianness from BTRFS_IOC_FS_INFO Btrfs: do not reset bio->bi_ops while writing bio Btrfs: use the new helper wbc_to_write_flags
This commit is contained in:
commit
5ba88cd6e9
11 changed files with 72 additions and 27 deletions
|
@ -135,6 +135,18 @@ static inline void btrfs_cleanup_ordered_extents(struct inode *inode,
|
|||
const u64 offset,
|
||||
const u64 bytes)
|
||||
{
|
||||
unsigned long index = offset >> PAGE_SHIFT;
|
||||
unsigned long end_index = (offset + bytes - 1) >> PAGE_SHIFT;
|
||||
struct page *page;
|
||||
|
||||
while (index <= end_index) {
|
||||
page = find_get_page(inode->i_mapping, index);
|
||||
index++;
|
||||
if (!page)
|
||||
continue;
|
||||
ClearPagePrivate2(page);
|
||||
put_page(page);
|
||||
}
|
||||
return __endio_write_update_ordered(inode, offset + PAGE_SIZE,
|
||||
bytes - PAGE_SIZE, false);
|
||||
}
|
||||
|
@ -8357,11 +8369,8 @@ static void btrfs_endio_direct_read(struct bio *bio)
|
|||
struct btrfs_io_bio *io_bio = btrfs_io_bio(bio);
|
||||
blk_status_t err = bio->bi_status;
|
||||
|
||||
if (dip->flags & BTRFS_DIO_ORIG_BIO_SUBMITTED) {
|
||||
if (dip->flags & BTRFS_DIO_ORIG_BIO_SUBMITTED)
|
||||
err = btrfs_subio_endio_read(inode, io_bio, err);
|
||||
if (!err)
|
||||
bio->bi_status = 0;
|
||||
}
|
||||
|
||||
unlock_extent(&BTRFS_I(inode)->io_tree, dip->logical_offset,
|
||||
dip->logical_offset + dip->bytes - 1);
|
||||
|
@ -8369,7 +8378,7 @@ static void btrfs_endio_direct_read(struct bio *bio)
|
|||
|
||||
kfree(dip);
|
||||
|
||||
dio_bio->bi_status = bio->bi_status;
|
||||
dio_bio->bi_status = err;
|
||||
dio_end_io(dio_bio);
|
||||
|
||||
if (io_bio->end_io)
|
||||
|
@ -8387,6 +8396,7 @@ static void __endio_write_update_ordered(struct inode *inode,
|
|||
btrfs_work_func_t func;
|
||||
u64 ordered_offset = offset;
|
||||
u64 ordered_bytes = bytes;
|
||||
u64 last_offset;
|
||||
int ret;
|
||||
|
||||
if (btrfs_is_free_space_inode(BTRFS_I(inode))) {
|
||||
|
@ -8398,6 +8408,7 @@ static void __endio_write_update_ordered(struct inode *inode,
|
|||
}
|
||||
|
||||
again:
|
||||
last_offset = ordered_offset;
|
||||
ret = btrfs_dec_test_first_ordered_pending(inode, &ordered,
|
||||
&ordered_offset,
|
||||
ordered_bytes,
|
||||
|
@ -8408,6 +8419,12 @@ again:
|
|||
btrfs_init_work(&ordered->work, func, finish_ordered_fn, NULL, NULL);
|
||||
btrfs_queue_work(wq, &ordered->work);
|
||||
out_test:
|
||||
/*
|
||||
* If btrfs_dec_test_ordered_pending does not find any ordered extent
|
||||
* in the range, we can exit.
|
||||
*/
|
||||
if (ordered_offset == last_offset)
|
||||
return;
|
||||
/*
|
||||
* our bio might span multiple ordered extents. If we haven't
|
||||
* completed the accounting for the whole dio, go back and try again
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue