mirror of
https://github.com/versity/scoutfs.git
synced 2026-02-07 19:20:44 +00:00
Add some simple lock/invalidation tracing
Signed-off-by: Zach Brown <zab@versity.com>
This commit is contained in:
@@ -99,6 +99,8 @@ static int invalidate_caches(struct super_block *sb, int mode,
|
||||
{
|
||||
int ret;
|
||||
|
||||
trace_scoutfs_lock_invalidate_sb(sb, mode, start, end);
|
||||
|
||||
ret = scoutfs_item_writeback(sb, start, end);
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -176,6 +178,8 @@ int scoutfs_lock_range(struct super_block *sb, int mode,
|
||||
lck->end = end;
|
||||
lck->mode = mode;
|
||||
|
||||
trace_scoutfs_lock_range(sb, lck);
|
||||
|
||||
ret = wait_event_interruptible(held->waitq, lock_added(held, lck));
|
||||
if (ret == 0) {
|
||||
ret = invalidate_others(sb, mode, start, end);
|
||||
@@ -191,6 +195,8 @@ void scoutfs_unlock_range(struct super_block *sb, struct scoutfs_lock *lck)
|
||||
DECLARE_LOCK_INFO(sb, linf);
|
||||
struct held_locks *held = linf->held;
|
||||
|
||||
trace_scoutfs_unlock_range(sb, lck);
|
||||
|
||||
unlock(held, lck);
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "key.h"
|
||||
#include "format.h"
|
||||
#include "kvec.h"
|
||||
#include "lock.h"
|
||||
|
||||
struct scoutfs_sb_info;
|
||||
|
||||
@@ -231,6 +232,59 @@ TRACE_EVENT(scoutfs_item_insert_batch,
|
||||
TP_printk("start %s end %s", __get_str(start), __get_str(end))
|
||||
);
|
||||
|
||||
#define lock_mode(mode) \
|
||||
__print_symbolic(mode, \
|
||||
{ SCOUTFS_LOCK_MODE_READ, "READ" }, \
|
||||
{ SCOUTFS_LOCK_MODE_WRITE, "WRITE" })
|
||||
|
||||
DECLARE_EVENT_CLASS(scoutfs_lock_class,
|
||||
TP_PROTO(struct super_block *sb, struct scoutfs_lock *lck),
|
||||
TP_ARGS(sb, lck),
|
||||
TP_STRUCT__entry(
|
||||
__field(int, mode)
|
||||
__dynamic_array(char, start, scoutfs_key_str(NULL, lck->start))
|
||||
__dynamic_array(char, end, scoutfs_key_str(NULL, lck->end))
|
||||
),
|
||||
TP_fast_assign(
|
||||
__entry->mode = lck->mode;
|
||||
scoutfs_key_str(__get_dynamic_array(start), lck->start);
|
||||
scoutfs_key_str(__get_dynamic_array(end), lck->end);
|
||||
),
|
||||
TP_printk("mode %s start %s end %s",
|
||||
lock_mode(__entry->mode), __get_str(start), __get_str(end))
|
||||
);
|
||||
|
||||
DEFINE_EVENT(scoutfs_lock_class, scoutfs_lock_range,
|
||||
TP_PROTO(struct super_block *sb, struct scoutfs_lock *lck),
|
||||
TP_ARGS(sb, lck)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(scoutfs_lock_class, scoutfs_unlock_range,
|
||||
TP_PROTO(struct super_block *sb, struct scoutfs_lock *lck),
|
||||
TP_ARGS(sb, lck)
|
||||
);
|
||||
|
||||
TRACE_EVENT(scoutfs_lock_invalidate_sb,
|
||||
TP_PROTO(struct super_block *sb, int mode,
|
||||
struct scoutfs_key_buf *start, struct scoutfs_key_buf *end),
|
||||
TP_ARGS(sb, mode, start, end),
|
||||
TP_STRUCT__entry(
|
||||
__field(void *, sb)
|
||||
__field(int, mode)
|
||||
__dynamic_array(char, start, scoutfs_key_str(NULL, start))
|
||||
__dynamic_array(char, end, scoutfs_key_str(NULL, end))
|
||||
),
|
||||
TP_fast_assign(
|
||||
__entry->sb = sb;
|
||||
__entry->mode = mode;
|
||||
scoutfs_key_str(__get_dynamic_array(start), start);
|
||||
scoutfs_key_str(__get_dynamic_array(end), end);
|
||||
),
|
||||
TP_printk("sb %p mode %s start %s end %s",
|
||||
__entry->sb, lock_mode(__entry->mode),
|
||||
__get_str(start), __get_str(end))
|
||||
);
|
||||
|
||||
#endif /* _TRACE_SCOUTFS_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
|
||||
Reference in New Issue
Block a user