Skip to content

Commit 9e91c57

Browse files
Christoph Hellwigdjwong
authored andcommitted
iomap: lift common tracing code from xfs to iomap
Lift the xfs code for tracing address space operations to the iomap layer. Signed-off-by: Christoph Hellwig <[email protected]> Reviewed-by: Dave Chinner <[email protected]> Reviewed-by: Darrick J. Wong <[email protected]> Signed-off-by: Darrick J. Wong <[email protected]>
1 parent 009d8d8 commit 9e91c57

File tree

6 files changed

+120
-57
lines changed

6 files changed

+120
-57
lines changed

fs/iomap/Makefile

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
# Copyright (c) 2019 Oracle.
44
# All Rights Reserved.
55
#
6-
obj-$(CONFIG_FS_IOMAP) += iomap.o
76

8-
iomap-y += \
9-
apply.o \
10-
buffered-io.o \
11-
direct-io.o \
12-
fiemap.o \
13-
seek.o
7+
ccflags-y += -I $(srctree)/$(src) # needed for trace events
8+
9+
obj-$(CONFIG_FS_IOMAP) += iomap.o
1410

11+
iomap-y += trace.o \
12+
apply.o \
13+
buffered-io.o \
14+
direct-io.o \
15+
fiemap.o \
16+
seek.o
1517
iomap-$(CONFIG_SWAP) += swapfile.o

fs/iomap/buffered-io.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include <linux/bio.h>
1717
#include <linux/sched/signal.h>
1818
#include <linux/migrate.h>
19+
#include "trace.h"
1920

2021
#include "../internal.h"
2122

@@ -301,6 +302,8 @@ iomap_readpage(struct page *page, const struct iomap_ops *ops)
301302
unsigned poff;
302303
loff_t ret;
303304

305+
trace_iomap_readpage(page->mapping->host, 1);
306+
304307
for (poff = 0; poff < PAGE_SIZE; poff += ret) {
305308
ret = iomap_apply(inode, page_offset(page) + poff,
306309
PAGE_SIZE - poff, 0, ops, &ctx,
@@ -397,6 +400,8 @@ iomap_readpages(struct address_space *mapping, struct list_head *pages,
397400
loff_t last = page_offset(list_entry(pages->next, struct page, lru));
398401
loff_t length = last - pos + PAGE_SIZE, ret = 0;
399402

403+
trace_iomap_readpages(mapping->host, nr_pages);
404+
400405
while (length > 0) {
401406
ret = iomap_apply(mapping->host, pos, length, 0, ops,
402407
&ctx, iomap_readpages_actor);
@@ -463,6 +468,8 @@ EXPORT_SYMBOL_GPL(iomap_is_partially_uptodate);
463468
int
464469
iomap_releasepage(struct page *page, gfp_t gfp_mask)
465470
{
471+
trace_iomap_releasepage(page->mapping->host, page, 0, 0);
472+
466473
/*
467474
* mm accommodates an old ext3 case where clean pages might not have had
468475
* the dirty bit cleared. Thus, it can send actual dirty pages to
@@ -478,6 +485,8 @@ EXPORT_SYMBOL_GPL(iomap_releasepage);
478485
void
479486
iomap_invalidatepage(struct page *page, unsigned int offset, unsigned int len)
480487
{
488+
trace_iomap_invalidatepage(page->mapping->host, page, offset, len);
489+
481490
/*
482491
* If we are invalidating the entire page, clear the dirty state from it
483492
* and release it to avoid unnecessary buildup of the LRU.

fs/iomap/trace.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// SPDX-License-Identifier: GPL-2.0
2+
/*
3+
* Copyright (c) 2019 Christoph Hellwig
4+
*/
5+
#include <linux/iomap.h>
6+
7+
/*
8+
* We include this last to have the helpers above available for the trace
9+
* event implementations.
10+
*/
11+
#define CREATE_TRACE_POINTS
12+
#include "trace.h"

fs/iomap/trace.h

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
/* SPDX-License-Identifier: GPL-2.0 */
2+
/*
3+
* Copyright (c) 2009-2019 Christoph Hellwig
4+
*
5+
* NOTE: none of these tracepoints shall be consider a stable kernel ABI
6+
* as they can change at any time.
7+
*/
8+
#undef TRACE_SYSTEM
9+
#define TRACE_SYSTEM iomap
10+
11+
#if !defined(_IOMAP_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
12+
#define _IOMAP_TRACE_H
13+
14+
#include <linux/tracepoint.h>
15+
16+
struct inode;
17+
18+
DECLARE_EVENT_CLASS(iomap_readpage_class,
19+
TP_PROTO(struct inode *inode, int nr_pages),
20+
TP_ARGS(inode, nr_pages),
21+
TP_STRUCT__entry(
22+
__field(dev_t, dev)
23+
__field(u64, ino)
24+
__field(int, nr_pages)
25+
),
26+
TP_fast_assign(
27+
__entry->dev = inode->i_sb->s_dev;
28+
__entry->ino = inode->i_ino;
29+
__entry->nr_pages = nr_pages;
30+
),
31+
TP_printk("dev %d:%d ino 0x%llx nr_pages %d",
32+
MAJOR(__entry->dev), MINOR(__entry->dev),
33+
__entry->ino,
34+
__entry->nr_pages)
35+
)
36+
37+
#define DEFINE_READPAGE_EVENT(name) \
38+
DEFINE_EVENT(iomap_readpage_class, name, \
39+
TP_PROTO(struct inode *inode, int nr_pages), \
40+
TP_ARGS(inode, nr_pages))
41+
DEFINE_READPAGE_EVENT(iomap_readpage);
42+
DEFINE_READPAGE_EVENT(iomap_readpages);
43+
44+
DECLARE_EVENT_CLASS(iomap_page_class,
45+
TP_PROTO(struct inode *inode, struct page *page, unsigned long off,
46+
unsigned int len),
47+
TP_ARGS(inode, page, off, len),
48+
TP_STRUCT__entry(
49+
__field(dev_t, dev)
50+
__field(u64, ino)
51+
__field(pgoff_t, pgoff)
52+
__field(loff_t, size)
53+
__field(unsigned long, offset)
54+
__field(unsigned int, length)
55+
),
56+
TP_fast_assign(
57+
__entry->dev = inode->i_sb->s_dev;
58+
__entry->ino = inode->i_ino;
59+
__entry->pgoff = page_offset(page);
60+
__entry->size = i_size_read(inode);
61+
__entry->offset = off;
62+
__entry->length = len;
63+
),
64+
TP_printk("dev %d:%d ino 0x%llx pgoff 0x%lx size 0x%llx offset %lx "
65+
"length %x",
66+
MAJOR(__entry->dev), MINOR(__entry->dev),
67+
__entry->ino,
68+
__entry->pgoff,
69+
__entry->size,
70+
__entry->offset,
71+
__entry->length)
72+
)
73+
74+
#define DEFINE_PAGE_EVENT(name) \
75+
DEFINE_EVENT(iomap_page_class, name, \
76+
TP_PROTO(struct inode *inode, struct page *page, unsigned long off, \
77+
unsigned int len), \
78+
TP_ARGS(inode, page, off, len))
79+
DEFINE_PAGE_EVENT(iomap_releasepage);
80+
DEFINE_PAGE_EVENT(iomap_invalidatepage);
81+
82+
#endif /* _IOMAP_TRACE_H */
83+
84+
#undef TRACE_INCLUDE_PATH
85+
#define TRACE_INCLUDE_PATH .
86+
#define TRACE_INCLUDE_FILE trace
87+
#include <trace/define_trace.h>

fs/xfs/xfs_aops.c

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -823,16 +823,6 @@ xfs_add_to_ioend(
823823
wbc_account_cgroup_owner(wbc, page, len);
824824
}
825825

826-
STATIC void
827-
xfs_vm_invalidatepage(
828-
struct page *page,
829-
unsigned int offset,
830-
unsigned int length)
831-
{
832-
trace_xfs_invalidatepage(page->mapping->host, page, offset, length);
833-
iomap_invalidatepage(page, offset, length);
834-
}
835-
836826
/*
837827
* If the page has delalloc blocks on it, we need to punch them out before we
838828
* invalidate the page. If we don't, we leave a stale delalloc mapping on the
@@ -867,7 +857,7 @@ xfs_aops_discard_page(
867857
if (error && !XFS_FORCED_SHUTDOWN(mp))
868858
xfs_alert(mp, "page discard unable to remove delalloc mapping.");
869859
out_invalidate:
870-
xfs_vm_invalidatepage(page, 0, PAGE_SIZE);
860+
iomap_invalidatepage(page, 0, PAGE_SIZE);
871861
}
872862

873863
/*
@@ -1147,15 +1137,6 @@ xfs_dax_writepages(
11471137
xfs_find_bdev_for_inode(mapping->host), wbc);
11481138
}
11491139

1150-
STATIC int
1151-
xfs_vm_releasepage(
1152-
struct page *page,
1153-
gfp_t gfp_mask)
1154-
{
1155-
trace_xfs_releasepage(page->mapping->host, page, 0, 0);
1156-
return iomap_releasepage(page, gfp_mask);
1157-
}
1158-
11591140
STATIC sector_t
11601141
xfs_vm_bmap(
11611142
struct address_space *mapping,
@@ -1184,7 +1165,6 @@ xfs_vm_readpage(
11841165
struct file *unused,
11851166
struct page *page)
11861167
{
1187-
trace_xfs_vm_readpage(page->mapping->host, 1);
11881168
return iomap_readpage(page, &xfs_iomap_ops);
11891169
}
11901170

@@ -1195,7 +1175,6 @@ xfs_vm_readpages(
11951175
struct list_head *pages,
11961176
unsigned nr_pages)
11971177
{
1198-
trace_xfs_vm_readpages(mapping->host, nr_pages);
11991178
return iomap_readpages(mapping, pages, nr_pages, &xfs_iomap_ops);
12001179
}
12011180

@@ -1215,8 +1194,8 @@ const struct address_space_operations xfs_address_space_operations = {
12151194
.writepage = xfs_vm_writepage,
12161195
.writepages = xfs_vm_writepages,
12171196
.set_page_dirty = iomap_set_page_dirty,
1218-
.releasepage = xfs_vm_releasepage,
1219-
.invalidatepage = xfs_vm_invalidatepage,
1197+
.releasepage = iomap_releasepage,
1198+
.invalidatepage = iomap_invalidatepage,
12201199
.bmap = xfs_vm_bmap,
12211200
.direct_IO = noop_direct_IO,
12221201
.migratepage = iomap_migrate_page,

fs/xfs/xfs_trace.h

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1197,32 +1197,6 @@ DEFINE_PAGE_EVENT(xfs_writepage);
11971197
DEFINE_PAGE_EVENT(xfs_releasepage);
11981198
DEFINE_PAGE_EVENT(xfs_invalidatepage);
11991199

1200-
DECLARE_EVENT_CLASS(xfs_readpage_class,
1201-
TP_PROTO(struct inode *inode, int nr_pages),
1202-
TP_ARGS(inode, nr_pages),
1203-
TP_STRUCT__entry(
1204-
__field(dev_t, dev)
1205-
__field(xfs_ino_t, ino)
1206-
__field(int, nr_pages)
1207-
),
1208-
TP_fast_assign(
1209-
__entry->dev = inode->i_sb->s_dev;
1210-
__entry->ino = inode->i_ino;
1211-
__entry->nr_pages = nr_pages;
1212-
),
1213-
TP_printk("dev %d:%d ino 0x%llx nr_pages %d",
1214-
MAJOR(__entry->dev), MINOR(__entry->dev),
1215-
__entry->ino,
1216-
__entry->nr_pages)
1217-
)
1218-
1219-
#define DEFINE_READPAGE_EVENT(name) \
1220-
DEFINE_EVENT(xfs_readpage_class, name, \
1221-
TP_PROTO(struct inode *inode, int nr_pages), \
1222-
TP_ARGS(inode, nr_pages))
1223-
DEFINE_READPAGE_EVENT(xfs_vm_readpage);
1224-
DEFINE_READPAGE_EVENT(xfs_vm_readpages);
1225-
12261200
DECLARE_EVENT_CLASS(xfs_imap_class,
12271201
TP_PROTO(struct xfs_inode *ip, xfs_off_t offset, ssize_t count,
12281202
int whichfork, struct xfs_bmbt_irec *irec),

0 commit comments

Comments
 (0)