Skip to content

Commit

Permalink
dlibs, io: handle kernel 5.11's restructuring of struct bdev
Browse files Browse the repository at this point in the history
In commit 0d02129e76edf91cf before 5.11, the struct block_device and
struct hd_struct are merged.  Handle the fallout in the io.d
translators.

Signed-off-by: Nick Alcock <nick.alcock@oracle.com>
Reviewed-by: Kris Van Hees <kris.van.hees@oracle.com>
  • Loading branch information
nickalcock committed Mar 9, 2021
1 parent c230073 commit ac49f54
Showing 1 changed file with 19 additions and 17 deletions.
36 changes: 19 additions & 17 deletions libdtrace/io.d.in
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@ inline int REQ_SYNC = REQ_SYNC_VAL;
define_for_kernel([[__bi_rw]], [[(m4_kver(4,8,0), [[bi_opf]])]], [[bi_rw]])
define_for_kernel([[__disk]], [[(m4_kver(4,14,0), [[bi_disk]])]], [[bi_bdev->bd_disk]])
define_for_kernel([[__disk_chk]], [[(m4_kver(4,14,0), [[bi_disk]])]], [[bi_bdev]])
define_for_kernel([[__partno]], [[(m4_kver(4,14,0), [[bi_partno]])]], [[bi_bdev->bd_part->partno]])
define_for_kernel([[__part_dev]], [[(m4_kver(4,14,0), [[bi_disk->part_tbl->part[B->bi_partno]->__dev.devt]])]], [[bi_bdev->bd_part->__dev.devt]])
define_for_kernel([[__bio_partno]], [[(m4_kver(4,14,0), [[bi_partno]])]], [[bi_bdev->bd_part->partno]])
define_for_kernel([[__bio_part_dev]], [[(m4_kver(5,11,0), [[bi_disk->part_tbl->part[B->bi_partno]->bd_dev]]), (m4_kver(4,14,0), [[bi_disk->part_tbl->part[B->bi_partno]->__dev.devt]])]], [[bi_bdev->bd_part->__dev.devt]])

#pragma D binding "1.6.3" translator
translator bufinfo_t < struct bio *B > {
Expand All @@ -83,7 +83,7 @@ translator bufinfo_t < struct bio *B > {
b_bufsize = B->bi_iter.bi_size;
b_iodone = (caddr_t)B->bi_end_io;
b_error = 0;
b_edev = B->__disk_chk == NULL ? 0 : B->__part_dev;
b_edev = B->__disk_chk == NULL ? 0 : B->__bio_part_dev;
};

typedef struct devinfo {
Expand All @@ -95,41 +95,43 @@ typedef struct devinfo {
string dev_pathname; /* pathname of device */
} devinfo_t;

define_for_kernel([[__bh_bdev_dev]], [[(m4_kver(5,11,0), [[b_bdev->bd_disk->part0->bd_device]])]], [[b_bdev->bd_disk->part0.__dev]])
define_for_kernel([[__bdev_partno]], [[(m4_kver(5,11,0), [[bd_partno]])]], [[bd_part->partno]])
#pragma D binding "1.0" translator
translator devinfo_t < struct buffer_head *B > {
dev_major = getmajor(B->b_bdev->bd_dev);
dev_minor = getminor(B->b_bdev->bd_dev);
dev_instance = 0; /* not used? */
dev_name = B->b_bdev->bd_disk->part0.__dev.parent
? B->b_bdev->bd_disk->part0.__dev.parent->driver->name
? stringof(B->b_bdev->bd_disk->part0.__dev.parent->driver->name)
dev_name = B->__bh_bdev_dev.parent
? B->__bh_bdev_dev.parent->driver->name
? stringof(B->__bh_bdev_dev.parent->driver->name)
: "<none>"
: B->b_bdev->bd_disk->part0.__dev.driver->name
? stringof(B->b_bdev->bd_disk->part0.__dev.driver->name)
: B->__bh_bdev_dev.driver->name
? stringof(B->__bh_bdev_dev.driver->name)
: "<none>";
dev_statname = B->b_bdev->bd_part->partno == 0
dev_statname = B->b_bdev->__bdev_partno == 0
? stringof(B->b_bdev->bd_disk->disk_name)
: strjoin(stringof(B->b_bdev->bd_disk->disk_name),
lltostr(B->b_bdev->bd_part->partno));
lltostr(B->b_bdev->__bdev_partno));
dev_pathname = strjoin(
"/dev/",
B->b_bdev->bd_part->partno == 0
B->b_bdev->__bdev_partno == 0
? stringof(B->b_bdev->bd_disk->disk_name)
: strjoin(stringof(B->b_bdev->bd_disk->disk_name),
lltostr(B->b_bdev->bd_part->partno))
lltostr(B->b_bdev->__bdev_partno))
);
};

#pragma D binding "1.6.3" translator
translator devinfo_t < struct bio *B > {
dev_major = B->__disk_chk == NULL ? 0 : getmajor(B->__part_dev);
dev_minor = B->__disk_chk == NULL ? 0 : getminor(B->__part_dev);
dev_major = B->__disk_chk == NULL ? 0 : getmajor(B->__bio_part_dev);
dev_minor = B->__disk_chk == NULL ? 0 : getminor(B->__bio_part_dev);
dev_instance = 0;
dev_name = B->__disk_chk == NULL ? "nfs" : stringof(`major_names[
getmajor(B->__part_dev) % 255]->name);
getmajor(B->__bio_part_dev) % 255]->name);
dev_statname = B->__disk_chk == NULL ? "nfs" :
B->__partno == 0 ? stringof(B->__disk->disk_name) :
strjoin(stringof(B->__disk->disk_name), lltostr(B->__partno));
B->__bio_partno == 0 ? stringof(B->__disk->disk_name) :
strjoin(stringof(B->__disk->disk_name), lltostr(B->__bio_partno));
dev_pathname = B->__disk_chk == NULL ? "<nfs>" : "<unknown>";
};

Expand Down

0 comments on commit ac49f54

Please sign in to comment.