mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-09 06:33:34 +00:00
btrfs: add a btrfs_finish_ordered_extent helper
Add a helper to complete an ordered_extent without first doing a lookup. The tracepoint cannot use the ordered_extent class as we also want to print the range. Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
2d6f107ea6
commit
122e9ede53
@ -368,6 +368,25 @@ static void btrfs_queue_ordered_fn(struct btrfs_ordered_extent *ordered)
|
||||
btrfs_queue_work(wq, &ordered->work);
|
||||
}
|
||||
|
||||
bool btrfs_finish_ordered_extent(struct btrfs_ordered_extent *ordered,
|
||||
struct page *page, u64 file_offset, u64 len,
|
||||
bool uptodate)
|
||||
{
|
||||
struct btrfs_inode *inode = BTRFS_I(ordered->inode);
|
||||
unsigned long flags;
|
||||
bool ret;
|
||||
|
||||
trace_btrfs_finish_ordered_extent(inode, file_offset, len, uptodate);
|
||||
|
||||
spin_lock_irqsave(&inode->ordered_tree.lock, flags);
|
||||
ret = can_finish_ordered_extent(ordered, page, file_offset, len, uptodate);
|
||||
spin_unlock_irqrestore(&inode->ordered_tree.lock, flags);
|
||||
|
||||
if (ret)
|
||||
btrfs_queue_ordered_fn(ordered);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Mark all ordered extents io inside the specified range finished.
|
||||
*
|
||||
|
@ -167,6 +167,9 @@ int btrfs_finish_ordered_io(struct btrfs_ordered_extent *ordered_extent);
|
||||
void btrfs_put_ordered_extent(struct btrfs_ordered_extent *entry);
|
||||
void btrfs_remove_ordered_extent(struct btrfs_inode *btrfs_inode,
|
||||
struct btrfs_ordered_extent *entry);
|
||||
bool btrfs_finish_ordered_extent(struct btrfs_ordered_extent *ordered,
|
||||
struct page *page, u64 file_offset, u64 len,
|
||||
bool uptodate);
|
||||
void btrfs_mark_ordered_io_finished(struct btrfs_inode *inode,
|
||||
struct page *page, u64 file_offset,
|
||||
u64 num_bytes, bool uptodate);
|
||||
|
@ -661,6 +661,35 @@ DEFINE_EVENT(btrfs__ordered_extent, btrfs_ordered_extent_mark_finished,
|
||||
TP_ARGS(inode, ordered)
|
||||
);
|
||||
|
||||
TRACE_EVENT(btrfs_finish_ordered_extent,
|
||||
|
||||
TP_PROTO(const struct btrfs_inode *inode, u64 start, u64 len,
|
||||
bool uptodate),
|
||||
|
||||
TP_ARGS(inode, start, len, uptodate),
|
||||
|
||||
TP_STRUCT__entry_btrfs(
|
||||
__field( u64, ino )
|
||||
__field( u64, start )
|
||||
__field( u64, len )
|
||||
__field( bool, uptodate )
|
||||
__field( u64, root_objectid )
|
||||
),
|
||||
|
||||
TP_fast_assign_btrfs(inode->root->fs_info,
|
||||
__entry->ino = btrfs_ino(inode);
|
||||
__entry->start = start;
|
||||
__entry->len = len;
|
||||
__entry->uptodate = uptodate;
|
||||
__entry->root_objectid = inode->root->root_key.objectid;
|
||||
),
|
||||
|
||||
TP_printk_btrfs("root=%llu(%s) ino=%llu start=%llu len=%llu uptodate=%d",
|
||||
show_root_type(__entry->root_objectid),
|
||||
__entry->ino, __entry->start,
|
||||
__entry->len, !!__entry->uptodate)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(btrfs__writepage,
|
||||
|
||||
TP_PROTO(const struct page *page, const struct inode *inode,
|
||||
|
Loading…
Reference in New Issue
Block a user