Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

nfs: more in-depth tracing of writepage events

Add tracepoints to nfs_writepage_setup() and nfs_do_writepage().

Signed-off-by: Jeff Layton <jlayton@kernel.org>
Reviewed-by: Benjamin Coddington <bcodding@redhat.com>
Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>

authored by

Jeff Layton and committed by
Anna Schumaker
b6ef079f 4a2d8171

+68
+66
fs/nfs/nfstrace.h
··· 45 45 { BIT(NFS_INO_LAYOUTSTATS), "LAYOUTSTATS" }, \ 46 46 { BIT(NFS_INO_ODIRECT), "ODIRECT" }) 47 47 48 + #define nfs_show_wb_flags(v) \ 49 + __print_flags(v, "|", \ 50 + { BIT(PG_BUSY), "BUSY" }, \ 51 + { BIT(PG_MAPPED), "MAPPED" }, \ 52 + { BIT(PG_FOLIO), "FOLIO" }, \ 53 + { BIT(PG_CLEAN), "CLEAN" }, \ 54 + { BIT(PG_COMMIT_TO_DS), "COMMIT_TO_DS" }, \ 55 + { BIT(PG_INODE_REF), "INODE_REF" }, \ 56 + { BIT(PG_HEADLOCK), "HEADLOCK" }, \ 57 + { BIT(PG_TEARDOWN), "TEARDOWN" }, \ 58 + { BIT(PG_UNLOCKPAGE), "UNLOCKPAGE" }, \ 59 + { BIT(PG_UPTODATE), "UPTODATE" }, \ 60 + { BIT(PG_WB_END), "WB_END" }, \ 61 + { BIT(PG_REMOVE), "REMOVE" }, \ 62 + { BIT(PG_CONTENDED1), "CONTENDED1" }, \ 63 + { BIT(PG_CONTENDED2), "CONTENDED2" }) 64 + 48 65 DECLARE_EVENT_CLASS(nfs_inode_event, 49 66 TP_PROTO( 50 67 const struct inode *inode ··· 1479 1462 show_nfs4_verifier(__entry->verifier) 1480 1463 ) 1481 1464 ); 1465 + 1466 + DECLARE_EVENT_CLASS(nfs_page_class, 1467 + TP_PROTO( 1468 + const struct nfs_page *req 1469 + ), 1470 + 1471 + TP_ARGS(req), 1472 + 1473 + TP_STRUCT__entry( 1474 + __field(dev_t, dev) 1475 + __field(u32, fhandle) 1476 + __field(u64, fileid) 1477 + __field(const struct nfs_page *__private, req) 1478 + __field(loff_t, offset) 1479 + __field(unsigned int, count) 1480 + __field(unsigned long, flags) 1481 + ), 1482 + 1483 + TP_fast_assign( 1484 + const struct inode *inode = folio_inode(req->wb_folio); 1485 + const struct nfs_inode *nfsi = NFS_I(inode); 1486 + 1487 + __entry->dev = inode->i_sb->s_dev; 1488 + __entry->fileid = nfsi->fileid; 1489 + __entry->fhandle = nfs_fhandle_hash(&nfsi->fh); 1490 + __entry->req = req; 1491 + __entry->offset = req_offset(req); 1492 + __entry->count = req->wb_bytes; 1493 + __entry->flags = req->wb_flags; 1494 + ), 1495 + 1496 + TP_printk( 1497 + "fileid=%02x:%02x:%llu fhandle=0x%08x req=%p offset=%lld count=%u flags=%s", 1498 + MAJOR(__entry->dev), MINOR(__entry->dev), 1499 + (unsigned long long)__entry->fileid, __entry->fhandle, 1500 + __entry->req, __entry->offset, __entry->count, 1501 + nfs_show_wb_flags(__entry->flags) 1502 + ) 1503 + ); 1504 + 1505 + #define DEFINE_NFS_PAGE_EVENT(name) \ 1506 + DEFINE_EVENT(nfs_page_class, name, \ 1507 + TP_PROTO( \ 1508 + const struct nfs_page *req \ 1509 + ), \ 1510 + TP_ARGS(req)) 1511 + 1512 + DEFINE_NFS_PAGE_EVENT(nfs_writepage_setup); 1513 + DEFINE_NFS_PAGE_EVENT(nfs_do_writepage); 1482 1514 1483 1515 DECLARE_EVENT_CLASS(nfs_page_error_class, 1484 1516 TP_PROTO(
+2
fs/nfs/write.c
··· 593 593 if (IS_ERR(req)) 594 594 return PTR_ERR(req); 595 595 596 + trace_nfs_do_writepage(req); 596 597 nfs_folio_set_writeback(folio); 597 598 WARN_ON_ONCE(test_bit(PG_CLEAN, &req->wb_flags)); 598 599 ··· 1096 1095 req = nfs_setup_write_request(ctx, folio, offset, count); 1097 1096 if (IS_ERR(req)) 1098 1097 return PTR_ERR(req); 1098 + trace_nfs_writepage_setup(req); 1099 1099 /* Update file length */ 1100 1100 nfs_grow_file(folio, offset, count); 1101 1101 nfs_mark_uptodate(req);