diff --git a/kmod/src/item.c b/kmod/src/item.c index 86697a31..77cd5057 100644 --- a/kmod/src/item.c +++ b/kmod/src/item.c @@ -1343,7 +1343,7 @@ int scoutfs_item_delete(struct super_block *sb, struct scoutfs_key *key, (ret = scoutfs_manifest_read_items(sb, key, &lock->start, &lock->end)) == 0); - trace_scoutfs_item_delete_ret(sb, ret); + trace_scoutfs_item_delete(sb, key, ret); return ret; } @@ -1404,12 +1404,16 @@ int scoutfs_item_delete_save(struct super_block *sb, bool was_dirty; int ret; - if (WARN_ON_ONCE(!lock_coverage(lock, key, DLM_LOCK_EX))) - return -EINVAL; + if (WARN_ON_ONCE(!lock_coverage(lock, key, DLM_LOCK_EX))) { + ret = -EINVAL; + goto out; + } del = alloc_item(sb, key, NULL); - if (!del) - return -ENOMEM; + if (!del) { + ret = -ENOMEM; + goto out; + } do { spin_lock_irqsave(&cac->lock, flags); @@ -1440,7 +1444,8 @@ int scoutfs_item_delete_save(struct super_block *sb, &lock->end)) == 0); free_item(sb, del); - +out: + trace_scoutfs_item_delete_save(sb, key, ret); return ret; } diff --git a/kmod/src/scoutfs_trace.h b/kmod/src/scoutfs_trace.h index 95d4676c..1ac7765b 100644 --- a/kmod/src/scoutfs_trace.h +++ b/kmod/src/scoutfs_trace.h @@ -227,22 +227,34 @@ TRACE_EVENT(scoutfs_dec_end_io, __entry->args, __entry->in_flight, __entry->err) ); -TRACE_EVENT(scoutfs_item_delete_ret, - TP_PROTO(struct super_block *sb, int ret), +DECLARE_EVENT_CLASS(scoutfs_key_ret_class, + TP_PROTO(struct super_block *sb, struct scoutfs_key *key, int ret), - TP_ARGS(sb, ret), + TP_ARGS(sb, key, ret), TP_STRUCT__entry( __field(__u64, fsid) + __field_struct(struct scoutfs_key, key) __field(int, ret) ), TP_fast_assign( __entry->fsid = FSID_ARG(sb); + __entry->key = *key; __entry->ret = ret; ), - TP_printk(FSID_FMT" ret %d", __entry->fsid, __entry->ret) + TP_printk("fsid "FSID_FMT" key "SK_FMT" ret %d", + __entry->fsid, SK_ARG(&__entry->key), __entry->ret) +); + +DEFINE_EVENT(scoutfs_key_ret_class, scoutfs_item_delete, + TP_PROTO(struct super_block *sb, struct scoutfs_key *key, int ret), + TP_ARGS(sb, key, ret) +); +DEFINE_EVENT(scoutfs_key_ret_class, scoutfs_item_delete_save, + TP_PROTO(struct super_block *sb, struct scoutfs_key *key, int ret), + TP_ARGS(sb, key, ret) ); TRACE_EVENT(scoutfs_item_dirty_ret,