Skip to content

Commit 4862fd6

Browse files
committed
jbd2: remove jbd2_dev_to_name() from jbd2 tracepoints
Using function calls in TP_printk causes perf heartburn, so print the MAJOR/MINOR device numbers instead. Signed-off-by: "Theodore Ts'o" <[email protected]>
1 parent 575a1d4 commit 4862fd6

File tree

3 files changed

+19
-90
lines changed

3 files changed

+19
-90
lines changed

fs/jbd2/journal.c

-67
Original file line numberDiff line numberDiff line change
@@ -2390,73 +2390,6 @@ static void __exit journal_exit(void)
23902390
jbd2_journal_destroy_caches();
23912391
}
23922392

2393-
/*
2394-
* jbd2_dev_to_name is a utility function used by the jbd2 and ext4
2395-
* tracing infrastructure to map a dev_t to a device name.
2396-
*
2397-
* The caller should use rcu_read_lock() in order to make sure the
2398-
* device name stays valid until its done with it. We use
2399-
* rcu_read_lock() as well to make sure we're safe in case the caller
2400-
* gets sloppy, and because rcu_read_lock() is cheap and can be safely
2401-
* nested.
2402-
*/
2403-
struct devname_cache {
2404-
struct rcu_head rcu;
2405-
dev_t device;
2406-
char devname[BDEVNAME_SIZE];
2407-
};
2408-
#define CACHE_SIZE_BITS 6
2409-
static struct devname_cache *devcache[1 << CACHE_SIZE_BITS];
2410-
static DEFINE_SPINLOCK(devname_cache_lock);
2411-
2412-
static void free_devcache(struct rcu_head *rcu)
2413-
{
2414-
kfree(rcu);
2415-
}
2416-
2417-
const char *jbd2_dev_to_name(dev_t device)
2418-
{
2419-
int i = hash_32(device, CACHE_SIZE_BITS);
2420-
char *ret;
2421-
struct block_device *bd;
2422-
static struct devname_cache *new_dev;
2423-
2424-
rcu_read_lock();
2425-
if (devcache[i] && devcache[i]->device == device) {
2426-
ret = devcache[i]->devname;
2427-
rcu_read_unlock();
2428-
return ret;
2429-
}
2430-
rcu_read_unlock();
2431-
2432-
new_dev = kmalloc(sizeof(struct devname_cache), GFP_KERNEL);
2433-
if (!new_dev)
2434-
return "NODEV-ALLOCFAILURE"; /* Something non-NULL */
2435-
bd = bdget(device);
2436-
spin_lock(&devname_cache_lock);
2437-
if (devcache[i]) {
2438-
if (devcache[i]->device == device) {
2439-
kfree(new_dev);
2440-
bdput(bd);
2441-
ret = devcache[i]->devname;
2442-
spin_unlock(&devname_cache_lock);
2443-
return ret;
2444-
}
2445-
call_rcu(&devcache[i]->rcu, free_devcache);
2446-
}
2447-
devcache[i] = new_dev;
2448-
devcache[i]->device = device;
2449-
if (bd) {
2450-
bdevname(bd, devcache[i]->devname);
2451-
bdput(bd);
2452-
} else
2453-
__bdevname(device, devcache[i]->devname);
2454-
ret = devcache[i]->devname;
2455-
spin_unlock(&devname_cache_lock);
2456-
return ret;
2457-
}
2458-
EXPORT_SYMBOL(jbd2_dev_to_name);
2459-
24602393
MODULE_LICENSE("GPL");
24612394
module_init(journal_init);
24622395
module_exit(journal_exit);

include/linux/jbd2.h

-6
Original file line numberDiff line numberDiff line change
@@ -1329,12 +1329,6 @@ extern int jbd_blocks_per_page(struct inode *inode);
13291329
#define BUFFER_TRACE2(bh, bh2, info) do {} while (0)
13301330
#define JBUFFER_TRACE(jh, info) do {} while (0)
13311331

1332-
/*
1333-
* jbd2_dev_to_name is a utility function used by the jbd2 and ext4
1334-
* tracing infrastructure to map a dev_t to a device name.
1335-
*/
1336-
extern const char *jbd2_dev_to_name(dev_t device);
1337-
13381332
#endif /* __KERNEL__ */
13391333

13401334
#endif /* _LINUX_JBD2_H */

include/trace/events/jbd2.h

+19-17
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ TRACE_EVENT(jbd2_checkpoint,
2626
__entry->result = result;
2727
),
2828

29-
TP_printk("dev %s result %d",
30-
jbd2_dev_to_name(__entry->dev), __entry->result)
29+
TP_printk("dev %d,%d result %d",
30+
MAJOR(__entry->dev), MINOR(__entry->dev), __entry->result)
3131
);
3232

3333
DECLARE_EVENT_CLASS(jbd2_commit,
@@ -48,9 +48,9 @@ DECLARE_EVENT_CLASS(jbd2_commit,
4848
__entry->transaction = commit_transaction->t_tid;
4949
),
5050

51-
TP_printk("dev %s transaction %d sync %d",
52-
jbd2_dev_to_name(__entry->dev), __entry->transaction,
53-
__entry->sync_commit)
51+
TP_printk("dev %d,%d transaction %d sync %d",
52+
MAJOR(__entry->dev), MINOR(__entry->dev),
53+
__entry->transaction, __entry->sync_commit)
5454
);
5555

5656
DEFINE_EVENT(jbd2_commit, jbd2_start_commit,
@@ -100,9 +100,9 @@ TRACE_EVENT(jbd2_end_commit,
100100
__entry->head = journal->j_tail_sequence;
101101
),
102102

103-
TP_printk("dev %s transaction %d sync %d head %d",
104-
jbd2_dev_to_name(__entry->dev), __entry->transaction,
105-
__entry->sync_commit, __entry->head)
103+
TP_printk("dev %d,%d transaction %d sync %d head %d",
104+
MAJOR(__entry->dev), MINOR(__entry->dev),
105+
__entry->transaction, __entry->sync_commit, __entry->head)
106106
);
107107

108108
TRACE_EVENT(jbd2_submit_inode_data,
@@ -120,8 +120,9 @@ TRACE_EVENT(jbd2_submit_inode_data,
120120
__entry->ino = inode->i_ino;
121121
),
122122

123-
TP_printk("dev %s ino %lu",
124-
jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino)
123+
TP_printk("dev %d,%d ino %lu",
124+
MAJOR(__entry->dev), MINOR(__entry->dev),
125+
(unsigned long) __entry->ino)
125126
);
126127

127128
TRACE_EVENT(jbd2_run_stats,
@@ -156,9 +157,9 @@ TRACE_EVENT(jbd2_run_stats,
156157
__entry->blocks_logged = stats->rs_blocks_logged;
157158
),
158159

159-
TP_printk("dev %s tid %lu wait %u running %u locked %u flushing %u "
160+
TP_printk("dev %d,%d tid %lu wait %u running %u locked %u flushing %u "
160161
"logging %u handle_count %u blocks %u blocks_logged %u",
161-
jbd2_dev_to_name(__entry->dev), __entry->tid,
162+
MAJOR(__entry->dev), MINOR(__entry->dev), __entry->tid,
162163
jiffies_to_msecs(__entry->wait),
163164
jiffies_to_msecs(__entry->running),
164165
jiffies_to_msecs(__entry->locked),
@@ -192,9 +193,9 @@ TRACE_EVENT(jbd2_checkpoint_stats,
192193
__entry->dropped = stats->cs_dropped;
193194
),
194195

195-
TP_printk("dev %s tid %lu chp_time %u forced_to_close %u "
196+
TP_printk("dev %d,%d tid %lu chp_time %u forced_to_close %u "
196197
"written %u dropped %u",
197-
jbd2_dev_to_name(__entry->dev), __entry->tid,
198+
MAJOR(__entry->dev), MINOR(__entry->dev), __entry->tid,
198199
jiffies_to_msecs(__entry->chp_time),
199200
__entry->forced_to_close, __entry->written, __entry->dropped)
200201
);
@@ -222,9 +223,10 @@ TRACE_EVENT(jbd2_cleanup_journal_tail,
222223
__entry->freed = freed;
223224
),
224225

225-
TP_printk("dev %s from %u to %u offset %lu freed %lu",
226-
jbd2_dev_to_name(__entry->dev), __entry->tail_sequence,
227-
__entry->first_tid, __entry->block_nr, __entry->freed)
226+
TP_printk("dev %d,%d from %u to %u offset %lu freed %lu",
227+
MAJOR(__entry->dev), MINOR(__entry->dev),
228+
__entry->tail_sequence, __entry->first_tid,
229+
__entry->block_nr, __entry->freed)
228230
);
229231

230232
#endif /* _TRACE_JBD2_H */

0 commit comments

Comments
 (0)