Commit 771e7e41 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'block-5.11-2020-12-23' of git://git.kernel.dk/linux-block

Pull block fixes from Jens Axboe:
 "A few stragglers in here, but mostly just straight fixes. In
  particular:

   - Set of rnbd fixes for issues around changes for the merge window
     (Gioh, Jack, Md Haris Iqbal)

   - iocost tracepoint addition (Baolin)

   - Copyright/maintainers update (Christoph)

   - Remove old blk-mq fast path CPU warning (Daniel)

   - loop max_part fix (Josh)

   - Remote IPI threaded IRQ fix (Sebastian)

   - dasd stable fixes (Stefan)

   - bcache merge window fixup and style fixup (Yi, Zheng)"

* tag 'block-5.11-2020-12-23' of git://git.kernel.dk/linux-block:
  md/bcache: convert comma to semicolon
  bcache:remove a superfluous check in register_bcache
  block: update some copyrights
  block: remove a pointless self-reference in block_dev.c
  MAINTAINERS: add fs/block_dev.c to the block section
  blk-mq: Don't complete on a remote CPU in force threaded mode
  s390/dasd: fix list corruption of lcu list
  s390/dasd: fix list corruption of pavgroup group list
  s390/dasd: prevent inconsistent LCU device data
  s390/dasd: fix hanging device offline processing
  blk-iocost: Add iocg idle state tracepoint
  nbd: Respect max_part for all partition scans
  block/rnbd-clt: Does not request pdu to rtrs-clt
  block/rnbd-clt: Dynamically allocate sglist for rnbd_iu
  block/rnbd: Set write-back cache and fua same to the target device
  block/rnbd: Fix typos
  block/rnbd-srv: Protect dev session sysfs removal
  block/rnbd-clt: Fix possible memleak
  block/rnbd-clt: Get rid of warning regarding size argument in strlcpy
  blk-mq: Remove 'running from the wrong CPU' warning
parents 1f13d2f7 46926127
...@@ -3199,6 +3199,7 @@ S: Maintained ...@@ -3199,6 +3199,7 @@ S: Maintained
T: git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git
F: block/ F: block/
F: drivers/block/ F: drivers/block/
F: fs/block_dev.c
F: include/linux/blk* F: include/linux/blk*
F: kernel/trace/blktrace.c F: kernel/trace/blktrace.c
F: lib/sbitmap.c F: lib/sbitmap.c
......
...@@ -2185,6 +2185,9 @@ static int ioc_check_iocgs(struct ioc *ioc, struct ioc_now *now) ...@@ -2185,6 +2185,9 @@ static int ioc_check_iocgs(struct ioc *ioc, struct ioc_now *now)
WEIGHT_ONE); WEIGHT_ONE);
} }
TRACE_IOCG_PATH(iocg_idle, iocg, now,
atomic64_read(&iocg->active_period),
atomic64_read(&ioc->cur_period), vtime);
__propagate_weights(iocg, 0, 0, false, now); __propagate_weights(iocg, 0, 0, false, now);
list_del_init(&iocg->active_list); list_del_init(&iocg->active_list);
} }
......
...@@ -650,6 +650,14 @@ static inline bool blk_mq_complete_need_ipi(struct request *rq) ...@@ -650,6 +650,14 @@ static inline bool blk_mq_complete_need_ipi(struct request *rq)
if (!IS_ENABLED(CONFIG_SMP) || if (!IS_ENABLED(CONFIG_SMP) ||
!test_bit(QUEUE_FLAG_SAME_COMP, &rq->q->queue_flags)) !test_bit(QUEUE_FLAG_SAME_COMP, &rq->q->queue_flags))
return false; return false;
/*
* With force threaded interrupts enabled, raising softirq from an SMP
* function call will always result in waking the ksoftirqd thread.
* This is probably worse than completing the request on a different
* cache domain.
*/
if (force_irqthreads)
return false;
/* same CPU or cache domain? Complete locally */ /* same CPU or cache domain? Complete locally */
if (cpu == rq->mq_ctx->cpu || if (cpu == rq->mq_ctx->cpu ||
...@@ -1495,31 +1503,6 @@ static void __blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx) ...@@ -1495,31 +1503,6 @@ static void __blk_mq_run_hw_queue(struct blk_mq_hw_ctx *hctx)
{ {
int srcu_idx; int srcu_idx;
/*
* We should be running this queue from one of the CPUs that
* are mapped to it.
*
* There are at least two related races now between setting
* hctx->next_cpu from blk_mq_hctx_next_cpu() and running
* __blk_mq_run_hw_queue():
*
* - hctx->next_cpu is found offline in blk_mq_hctx_next_cpu(),
* but later it becomes online, then this warning is harmless
* at all
*
* - hctx->next_cpu is found online in blk_mq_hctx_next_cpu(),
* but later it becomes offline, then the warning can't be
* triggered, and we depend on blk-mq timeout handler to
* handle dispatched requests to this hctx
*/
if (!cpumask_test_cpu(raw_smp_processor_id(), hctx->cpumask) &&
cpu_online(hctx->next_cpu)) {
printk(KERN_WARNING "run queue from wrong CPU %d, hctx %s\n",
raw_smp_processor_id(),
cpumask_empty(hctx->cpumask) ? "inactive": "active");
dump_stack();
}
/* /*
* We can't run the queue inline with ints disabled. Ensure that * We can't run the queue inline with ints disabled. Ensure that
* we catch bad users of this early. * we catch bad users of this early.
......
// SPDX-License-Identifier: GPL-2.0 // SPDX-License-Identifier: GPL-2.0
/* /*
* gendisk handling * gendisk handling
*
* Portions Copyright (C) 2020 Christoph Hellwig
*/ */
#include <linux/module.h> #include <linux/module.h>
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
/* /*
* Copyright (C) 1991-1998 Linus Torvalds * Copyright (C) 1991-1998 Linus Torvalds
* Re-organised Feb 1998 Russell King * Re-organised Feb 1998 Russell King
* Copyright (C) 2020 Christoph Hellwig
*/ */
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/slab.h> #include <linux/slab.h>
......
...@@ -318,7 +318,8 @@ static int nbd_set_size(struct nbd_device *nbd, loff_t bytesize, ...@@ -318,7 +318,8 @@ static int nbd_set_size(struct nbd_device *nbd, loff_t bytesize,
blk_queue_logical_block_size(nbd->disk->queue, blksize); blk_queue_logical_block_size(nbd->disk->queue, blksize);
blk_queue_physical_block_size(nbd->disk->queue, blksize); blk_queue_physical_block_size(nbd->disk->queue, blksize);
set_bit(GD_NEED_PART_SCAN, &nbd->disk->state); if (max_part)
set_bit(GD_NEED_PART_SCAN, &nbd->disk->state);
if (!set_capacity_and_notify(nbd->disk, bytesize >> 9)) if (!set_capacity_and_notify(nbd->disk, bytesize >> 9))
kobject_uevent(&nbd_to_dev(nbd)->kobj, KOBJ_CHANGE); kobject_uevent(&nbd_to_dev(nbd)->kobj, KOBJ_CHANGE);
return 0; return 0;
...@@ -1476,9 +1477,11 @@ static int nbd_open(struct block_device *bdev, fmode_t mode) ...@@ -1476,9 +1477,11 @@ static int nbd_open(struct block_device *bdev, fmode_t mode)
refcount_set(&nbd->config_refs, 1); refcount_set(&nbd->config_refs, 1);
refcount_inc(&nbd->refs); refcount_inc(&nbd->refs);
mutex_unlock(&nbd->config_lock); mutex_unlock(&nbd->config_lock);
set_bit(GD_NEED_PART_SCAN, &bdev->bd_disk->state); if (max_part)
set_bit(GD_NEED_PART_SCAN, &bdev->bd_disk->state);
} else if (nbd_disconnected(nbd->config)) { } else if (nbd_disconnected(nbd->config)) {
set_bit(GD_NEED_PART_SCAN, &bdev->bd_disk->state); if (max_part)
set_bit(GD_NEED_PART_SCAN, &bdev->bd_disk->state);
} }
out: out:
mutex_unlock(&nbd_index_mutex); mutex_unlock(&nbd_index_mutex);
......
...@@ -432,7 +432,7 @@ void rnbd_clt_remove_dev_symlink(struct rnbd_clt_dev *dev) ...@@ -432,7 +432,7 @@ void rnbd_clt_remove_dev_symlink(struct rnbd_clt_dev *dev)
* i.e. rnbd_clt_unmap_dev_store() leading to a sysfs warning because * i.e. rnbd_clt_unmap_dev_store() leading to a sysfs warning because
* of sysfs link already was removed already. * of sysfs link already was removed already.
*/ */
if (strlen(dev->blk_symlink_name) && try_module_get(THIS_MODULE)) { if (dev->blk_symlink_name && try_module_get(THIS_MODULE)) {
sysfs_remove_link(rnbd_devs_kobj, dev->blk_symlink_name); sysfs_remove_link(rnbd_devs_kobj, dev->blk_symlink_name);
kfree(dev->blk_symlink_name); kfree(dev->blk_symlink_name);
module_put(THIS_MODULE); module_put(THIS_MODULE);
...@@ -521,7 +521,8 @@ static int rnbd_clt_add_dev_symlink(struct rnbd_clt_dev *dev) ...@@ -521,7 +521,8 @@ static int rnbd_clt_add_dev_symlink(struct rnbd_clt_dev *dev)
return 0; return 0;
out_err: out_err:
dev->blk_symlink_name[0] = '\0'; kfree(dev->blk_symlink_name);
dev->blk_symlink_name = NULL ;
return ret; return ret;
} }
......
This diff is collapsed.
...@@ -44,6 +44,13 @@ struct rnbd_iu_comp { ...@@ -44,6 +44,13 @@ struct rnbd_iu_comp {
int errno; int errno;
}; };
#ifdef CONFIG_ARCH_NO_SG_CHAIN
#define RNBD_INLINE_SG_CNT 0
#else
#define RNBD_INLINE_SG_CNT 2
#endif
#define RNBD_RDMA_SGL_SIZE (sizeof(struct scatterlist) * RNBD_INLINE_SG_CNT)
struct rnbd_iu { struct rnbd_iu {
union { union {
struct request *rq; /* for block io */ struct request *rq; /* for block io */
...@@ -56,11 +63,12 @@ struct rnbd_iu { ...@@ -56,11 +63,12 @@ struct rnbd_iu {
/* use to send msg associated with a sess */ /* use to send msg associated with a sess */
struct rnbd_clt_session *sess; struct rnbd_clt_session *sess;
}; };
struct scatterlist sglist[BMAX_SEGMENTS]; struct sg_table sgt;
struct work_struct work; struct work_struct work;
int errno; int errno;
struct rnbd_iu_comp comp; struct rnbd_iu_comp comp;
atomic_t refcount; atomic_t refcount;
struct scatterlist first_sgl[]; /* must be the last one */
}; };
struct rnbd_cpu_qlist { struct rnbd_cpu_qlist {
...@@ -112,6 +120,8 @@ struct rnbd_clt_dev { ...@@ -112,6 +120,8 @@ struct rnbd_clt_dev {
enum rnbd_access_mode access_mode; enum rnbd_access_mode access_mode;
bool read_only; bool read_only;
bool rotational; bool rotational;
bool wc;
bool fua;
u32 max_hw_sectors; u32 max_hw_sectors;
u32 max_write_same_sectors; u32 max_write_same_sectors;
u32 max_discard_sectors; u32 max_discard_sectors;
......
...@@ -108,6 +108,11 @@ struct rnbd_msg_close { ...@@ -108,6 +108,11 @@ struct rnbd_msg_close {
__le32 device_id; __le32 device_id;
}; };
enum rnbd_cache_policy {
RNBD_FUA = 1 << 0,
RNBD_WRITEBACK = 1 << 1,
};
/** /**
* struct rnbd_msg_open_rsp - response message to RNBD_MSG_OPEN * struct rnbd_msg_open_rsp - response message to RNBD_MSG_OPEN
* @hdr: message header * @hdr: message header
...@@ -124,6 +129,7 @@ struct rnbd_msg_close { ...@@ -124,6 +129,7 @@ struct rnbd_msg_close {
* @max_segments: max segments hardware support in one transfer * @max_segments: max segments hardware support in one transfer
* @secure_discard: supports secure discard * @secure_discard: supports secure discard
* @rotation: is a rotational disc? * @rotation: is a rotational disc?
* @cache_policy: support write-back caching or FUA?
*/ */
struct rnbd_msg_open_rsp { struct rnbd_msg_open_rsp {
struct rnbd_msg_hdr hdr; struct rnbd_msg_hdr hdr;
...@@ -139,7 +145,8 @@ struct rnbd_msg_open_rsp { ...@@ -139,7 +145,8 @@ struct rnbd_msg_open_rsp {
__le16 max_segments; __le16 max_segments;
__le16 secure_discard; __le16 secure_discard;
u8 rotational; u8 rotational;
u8 reserved[11]; u8 cache_policy;
u8 reserved[10];
}; };
/** /**
......
...@@ -338,9 +338,10 @@ static int rnbd_srv_link_ev(struct rtrs_srv *rtrs, ...@@ -338,9 +338,10 @@ static int rnbd_srv_link_ev(struct rtrs_srv *rtrs,
void rnbd_srv_sess_dev_force_close(struct rnbd_srv_sess_dev *sess_dev) void rnbd_srv_sess_dev_force_close(struct rnbd_srv_sess_dev *sess_dev)
{ {
mutex_lock(&sess_dev->sess->lock);
rnbd_srv_destroy_dev_session_sysfs(sess_dev); rnbd_srv_destroy_dev_session_sysfs(sess_dev);
mutex_unlock(&sess_dev->sess->lock);
sess_dev->keep_id = true; sess_dev->keep_id = true;
} }
static int process_msg_close(struct rtrs_srv *rtrs, static int process_msg_close(struct rtrs_srv *rtrs,
...@@ -549,6 +550,7 @@ static void rnbd_srv_fill_msg_open_rsp(struct rnbd_msg_open_rsp *rsp, ...@@ -549,6 +550,7 @@ static void rnbd_srv_fill_msg_open_rsp(struct rnbd_msg_open_rsp *rsp,
struct rnbd_srv_sess_dev *sess_dev) struct rnbd_srv_sess_dev *sess_dev)
{ {
struct rnbd_dev *rnbd_dev = sess_dev->rnbd_dev; struct rnbd_dev *rnbd_dev = sess_dev->rnbd_dev;
struct request_queue *q = bdev_get_queue(rnbd_dev->bdev);
rsp->hdr.type = cpu_to_le16(RNBD_MSG_OPEN_RSP); rsp->hdr.type = cpu_to_le16(RNBD_MSG_OPEN_RSP);
rsp->device_id = rsp->device_id =
...@@ -573,8 +575,12 @@ static void rnbd_srv_fill_msg_open_rsp(struct rnbd_msg_open_rsp *rsp, ...@@ -573,8 +575,12 @@ static void rnbd_srv_fill_msg_open_rsp(struct rnbd_msg_open_rsp *rsp,
cpu_to_le32(rnbd_dev_get_discard_alignment(rnbd_dev)); cpu_to_le32(rnbd_dev_get_discard_alignment(rnbd_dev));
rsp->secure_discard = rsp->secure_discard =
cpu_to_le16(rnbd_dev_get_secure_discard(rnbd_dev)); cpu_to_le16(rnbd_dev_get_secure_discard(rnbd_dev));
rsp->rotational = rsp->rotational = !blk_queue_nonrot(q);
!blk_queue_nonrot(bdev_get_queue(rnbd_dev->bdev)); rsp->cache_policy = 0;
if (test_bit(QUEUE_FLAG_WC, &q->queue_flags))
rsp->cache_policy |= RNBD_WRITEBACK;
if (blk_queue_fua(q))
rsp->cache_policy |= RNBD_FUA;
} }
static struct rnbd_srv_sess_dev * static struct rnbd_srv_sess_dev *
......
...@@ -157,12 +157,6 @@ void rtrs_clt_put_permit(struct rtrs_clt *clt, struct rtrs_permit *permit) ...@@ -157,12 +157,6 @@ void rtrs_clt_put_permit(struct rtrs_clt *clt, struct rtrs_permit *permit)
} }
EXPORT_SYMBOL(rtrs_clt_put_permit); EXPORT_SYMBOL(rtrs_clt_put_permit);
void *rtrs_permit_to_pdu(struct rtrs_permit *permit)
{
return permit + 1;
}
EXPORT_SYMBOL(rtrs_permit_to_pdu);
/** /**
* rtrs_permit_to_clt_con() - returns RDMA connection pointer by the permit * rtrs_permit_to_clt_con() - returns RDMA connection pointer by the permit
* @sess: client session pointer * @sess: client session pointer
......
...@@ -63,13 +63,6 @@ struct rtrs_clt *rtrs_clt_open(struct rtrs_clt_ops *ops, ...@@ -63,13 +63,6 @@ struct rtrs_clt *rtrs_clt_open(struct rtrs_clt_ops *ops,
void rtrs_clt_close(struct rtrs_clt *sess); void rtrs_clt_close(struct rtrs_clt *sess);
/**
* rtrs_permit_to_pdu() - converts rtrs_permit to opaque pdu pointer
* @permit: RTRS permit pointer, it associates the memory allocation for future
* RDMA operation.
*/
void *rtrs_permit_to_pdu(struct rtrs_permit *permit);
enum { enum {
RTRS_PERMIT_NOWAIT = 0, RTRS_PERMIT_NOWAIT = 0,
RTRS_PERMIT_WAIT = 1, RTRS_PERMIT_WAIT = 1,
......
...@@ -2535,8 +2535,6 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr, ...@@ -2535,8 +2535,6 @@ static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr,
else else
err = "device busy"; err = "device busy";
mutex_unlock(&bch_register_lock); mutex_unlock(&bch_register_lock);
if (!IS_ERR(bdev))
bdput(bdev);
if (attr == &ksysfs_register_quiet) if (attr == &ksysfs_register_quiet)
goto done; goto done;
} }
......
...@@ -404,7 +404,7 @@ STORE(__cached_dev) ...@@ -404,7 +404,7 @@ STORE(__cached_dev)
if (!env) if (!env)
return -ENOMEM; return -ENOMEM;
add_uevent_var(env, "DRIVER=bcache"); add_uevent_var(env, "DRIVER=bcache");
add_uevent_var(env, "CACHED_UUID=%pU", dc->sb.uuid), add_uevent_var(env, "CACHED_UUID=%pU", dc->sb.uuid);
add_uevent_var(env, "CACHED_LABEL=%s", buf); add_uevent_var(env, "CACHED_LABEL=%s", buf);
kobject_uevent_env(&disk_to_dev(dc->disk.disk)->kobj, kobject_uevent_env(&disk_to_dev(dc->disk.disk)->kobj,
KOBJ_CHANGE, KOBJ_CHANGE,
......
...@@ -256,7 +256,6 @@ void dasd_alias_disconnect_device_from_lcu(struct dasd_device *device) ...@@ -256,7 +256,6 @@ void dasd_alias_disconnect_device_from_lcu(struct dasd_device *device)
return; return;
device->discipline->get_uid(device, &uid); device->discipline->get_uid(device, &uid);
spin_lock_irqsave(&lcu->lock, flags); spin_lock_irqsave(&lcu->lock, flags);
list_del_init(&device->alias_list);
/* make sure that the workers don't use this device */ /* make sure that the workers don't use this device */
if (device == lcu->suc_data.device) { if (device == lcu->suc_data.device) {
spin_unlock_irqrestore(&lcu->lock, flags); spin_unlock_irqrestore(&lcu->lock, flags);
...@@ -283,6 +282,7 @@ void dasd_alias_disconnect_device_from_lcu(struct dasd_device *device) ...@@ -283,6 +282,7 @@ void dasd_alias_disconnect_device_from_lcu(struct dasd_device *device)
spin_lock_irqsave(&aliastree.lock, flags); spin_lock_irqsave(&aliastree.lock, flags);
spin_lock(&lcu->lock); spin_lock(&lcu->lock);
list_del_init(&device->alias_list);
if (list_empty(&lcu->grouplist) && if (list_empty(&lcu->grouplist) &&
list_empty(&lcu->active_devices) && list_empty(&lcu->active_devices) &&
list_empty(&lcu->inactive_devices)) { list_empty(&lcu->inactive_devices)) {
...@@ -462,11 +462,19 @@ static int read_unit_address_configuration(struct dasd_device *device, ...@@ -462,11 +462,19 @@ static int read_unit_address_configuration(struct dasd_device *device,
spin_unlock_irqrestore(&lcu->lock, flags); spin_unlock_irqrestore(&lcu->lock, flags);
rc = dasd_sleep_on(cqr); rc = dasd_sleep_on(cqr);
if (rc && !suborder_not_supported(cqr)) { if (!rc)
goto out;
if (suborder_not_supported(cqr)) {
/* suborder not supported or device unusable for IO */
rc = -EOPNOTSUPP;
} else {
/* IO failed but should be retried */
spin_lock_irqsave(&lcu->lock, flags); spin_lock_irqsave(&lcu->lock, flags);
lcu->flags |= NEED_UAC_UPDATE; lcu->flags |= NEED_UAC_UPDATE;
spin_unlock_irqrestore(&lcu->lock, flags); spin_unlock_irqrestore(&lcu->lock, flags);
} }
out:
dasd_sfree_request(cqr, cqr->memdev); dasd_sfree_request(cqr, cqr->memdev);
return rc; return rc;
} }
...@@ -503,6 +511,14 @@ static int _lcu_update(struct dasd_device *refdev, struct alias_lcu *lcu) ...@@ -503,6 +511,14 @@ static int _lcu_update(struct dasd_device *refdev, struct alias_lcu *lcu)
return rc; return rc;
spin_lock_irqsave(&lcu->lock, flags); spin_lock_irqsave(&lcu->lock, flags);
/*
* there is another update needed skip the remaining handling
* the data might already be outdated
* but especially do not add the device to an LCU with pending
* update
*/
if (lcu->flags & NEED_UAC_UPDATE)
goto out;
lcu->pav = NO_PAV; lcu->pav = NO_PAV;
for (i = 0; i < MAX_DEVICES_PER_LCU; ++i) { for (i = 0; i < MAX_DEVICES_PER_LCU; ++i) {
switch (lcu->uac->unit[i].ua_type) { switch (lcu->uac->unit[i].ua_type) {
...@@ -521,6 +537,7 @@ static int _lcu_update(struct dasd_device *refdev, struct alias_lcu *lcu) ...@@ -521,6 +537,7 @@ static int _lcu_update(struct dasd_device *refdev, struct alias_lcu *lcu)
alias_list) { alias_list) {
_add_device_to_lcu(lcu, device, refdev); _add_device_to_lcu(lcu, device, refdev);
} }
out:
spin_unlock_irqrestore(&lcu->lock, flags); spin_unlock_irqrestore(&lcu->lock, flags);
return 0; return 0;
} }
...@@ -625,6 +642,7 @@ int dasd_alias_add_device(struct dasd_device *device) ...@@ -625,6 +642,7 @@ int dasd_alias_add_device(struct dasd_device *device)
} }
if (lcu->flags & UPDATE_PENDING) { if (lcu->flags & UPDATE_PENDING) {
list_move(&device->alias_list, &lcu->active_devices); list_move(&device->alias_list, &lcu->active_devices);
private->pavgroup = NULL;
_schedule_lcu_update(lcu, device); _schedule_lcu_update(lcu, device);
} }
spin_unlock_irqrestore(&lcu->lock, flags); spin_unlock_irqrestore(&lcu->lock, flags);
......
// SPDX-License-Identifier: GPL-2.0-only // SPDX-License-Identifier: GPL-2.0-only
/* /*
* linux/fs/block_dev.c
*
* Copyright (C) 1991, 1992 Linus Torvalds * Copyright (C) 1991, 1992 Linus Torvalds
* Copyright (C) 2001 Andrea Arcangeli <andrea@suse.de> SuSE * Copyright (C) 2001 Andrea Arcangeli <andrea@suse.de> SuSE
* Copyright (C) 2016 - 2020 Christoph Hellwig
*/ */
#include <linux/init.h> #include <linux/init.h>
......
...@@ -11,7 +11,7 @@ struct ioc_gq; ...@@ -11,7 +11,7 @@ struct ioc_gq;
#include <linux/tracepoint.h> #include <linux/tracepoint.h>
TRACE_EVENT(iocost_iocg_activate, DECLARE_EVENT_CLASS(iocost_iocg_state,
TP_PROTO(struct ioc_gq *iocg, const char *path, struct ioc_now *now, TP_PROTO(struct ioc_gq *iocg, const char *path, struct ioc_now *now,
u64 last_period, u64 cur_period, u64 vtime), u64 last_period, u64 cur_period, u64 vtime),
...@@ -59,6 +59,20 @@ TRACE_EVENT(iocost_iocg_activate, ...@@ -59,6 +59,20 @@ TRACE_EVENT(iocost_iocg_activate,
) )
); );
DEFINE_EVENT(iocost_iocg_state, iocost_iocg_activate,
TP_PROTO(struct ioc_gq *iocg, const char *path, struct ioc_now *now,
u64 last_period, u64 cur_period, u64 vtime),
TP_ARGS(iocg, path, now, last_period, cur_period, vtime)
);
DEFINE_EVENT(iocost_iocg_state, iocost_iocg_idle,
TP_PROTO(struct ioc_gq *iocg, const char *path, struct ioc_now *now,
u64 last_period, u64 cur_period, u64 vtime),
TP_ARGS(iocg, path, now, last_period, cur_period, vtime)
);
DECLARE_EVENT_CLASS(iocg_inuse_update, DECLARE_EVENT_CLASS(iocg_inuse_update,
TP_PROTO(struct ioc_gq *iocg, const char *path, struct ioc_now *now, TP_PROTO(struct ioc_gq *iocg, const char *path, struct ioc_now *now,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment