const volatile bool targ_per_flag = false;
const volatile bool targ_queued = false;
const volatile bool targ_ms = false;
-const volatile dev_t targ_dev = -1;
+const volatile bool filter_dev = false;
+const volatile __u32 targ_dev = 0;
struct {
__uint(type, BPF_MAP_TYPE_CGROUP_ARRAY);
u64 ts = bpf_ktime_get_ns();
- if (targ_dev != -1) {
+ if (filter_dev) {
struct gendisk *disk = BPF_CORE_READ(rq, rq_disk);
- dev_t dev;
+ u32 dev;
dev = disk ? MKDEV(BPF_CORE_READ(disk, major),
BPF_CORE_READ(disk, first_minor)) : 0;
fprintf(stderr, "invaild partition name: not exist\n");
goto cleanup;
}
+ obj->rodata->filter_dev = true;
obj->rodata->targ_dev = partition->dev;
}
obj->rodata->targ_per_disk = env.per_disk;
#include "biopattern.h"
#include "maps.bpf.h"
-const volatile dev_t targ_dev = -1;
+const volatile bool filter_dev = false;
+const volatile __u32 targ_dev = 0;
struct {
__uint(type, BPF_MAP_TYPE_HASH);
__uint(max_entries, 64);
- __type(key, dev_t);
+ __type(key, u32);
__type(value, struct counter);
__uint(map_flags, BPF_F_NO_PREALLOC);
} counters SEC(".maps");
sector_t sector = ctx->sector;
struct counter *counterp, zero = {};
u32 nr_sector = ctx->nr_sector;
- dev_t dev = ctx->dev;
+ u32 dev = ctx->dev;
- if (targ_dev != -1 && targ_dev != dev)
+ if (filter_dev && targ_dev != dev)
return 0;
counterp = bpf_map_lookup_or_try_init(&counters, &dev, &zero);
fprintf(stderr, "invaild partition name: not exist\n");
goto cleanup;
}
+ obj->rodata->filter_dev = true;
obj->rodata->targ_dev = partition->dev;
}
const volatile bool filter_cg = false;
const volatile bool targ_queued = false;
-const volatile dev_t targ_dev = -1;
+const volatile bool filter_dev = false;
+const volatile __u32 targ_dev = 0;
extern __u32 LINUX_KERNEL_VERSION __kconfig;
struct stage {
u64 insert;
u64 issue;
- dev_t dev;
+ __u32 dev;
};
struct {
stage.dev = disk ? MKDEV(BPF_CORE_READ(disk, major),
BPF_CORE_READ(disk, first_minor)) : 0;
- if (targ_dev != -1 && targ_dev != stage.dev)
+ if (filter_dev && targ_dev != stage.dev)
return 0;
stagep = &stage;
}
fprintf(stderr, "invaild partition name: not exist\n");
goto cleanup;
}
+ obj->rodata->filter_dev = true;
+ obj->rodata->targ_dev = partition->dev;
}
obj->rodata->targ_queued = env.queued;
obj->rodata->filter_cg = env.cg;
#define MAX_ENTRIES 10240
const volatile bool targ_ms = false;
-const volatile dev_t targ_dev = -1;
+const volatile bool filter_dev = false;
+const volatile __u32 targ_dev = -1;
struct internal_rqinfo {
u64 start_ts;
{
struct internal_rqinfo *i_rqinfop = NULL, i_rqinfo = {};
struct gendisk *disk = BPF_CORE_READ(rq, rq_disk);
- dev_t dev;
+ u32 dev;
dev = disk ? MKDEV(BPF_CORE_READ(disk, major),
BPF_CORE_READ(disk, first_minor)) : 0;
- if (targ_dev != -1 && targ_dev != dev)
+ if (filter_dev && targ_dev != dev)
return 0;
if (merge_bio)
fprintf(stderr, "invaild partition name: not exist\n");
goto cleanup;
}
+ obj->rodata->filter_dev = true;
obj->rodata->targ_dev = partition->dev;
}
#include "bits.bpf.h"
const volatile char targ_comm[TASK_COMM_LEN] = {};
-const volatile dev_t targ_dev = -1;
+const volatile bool filter_dev = false;
+const volatile __u32 targ_dev = 0;
extern __u32 LINUX_KERNEL_VERSION __kconfig;
struct hist *histp;
u64 slot;
- if (targ_dev != -1) {
+ if (filter_dev) {
struct gendisk *disk = BPF_CORE_READ(rq, rq_disk);
- dev_t dev;
+ u32 dev;
dev = disk ? MKDEV(BPF_CORE_READ(disk, major),
BPF_CORE_READ(disk, first_minor)) : 0;
fprintf(stderr, "invaild partition name: not exist\n");
goto cleanup;
}
+ obj->rodata->filter_dev = true;
obj->rodata->targ_dev = partition->dev;
}