summaryrefslogtreecommitdiffstats
path: root/tapset/dev.stp
diff options
context:
space:
mode:
Diffstat (limited to 'tapset/dev.stp')
-rw-r--r--tapset/dev.stp26
1 files changed, 24 insertions, 2 deletions
diff --git a/tapset/dev.stp b/tapset/dev.stp
index 80449324..2c22031a 100644
--- a/tapset/dev.stp
+++ b/tapset/dev.stp
@@ -1,5 +1,5 @@
-// Device numbering tapset
-// Copyright (C) 2008 Red Hat Corp.
+// Device tapset
+// Copyright (C) 2008, 2010 Red Hat Corp.
//
// This file is part of systemtap, and is free software. You can
// redistribute it and/or modify it under the terms of the GNU General
@@ -31,3 +31,25 @@ function usrdev2kerndev:long(dev:long)
%{ /* pure */
THIS->__retvalue = new_decode_dev(THIS->dev);
%}
+
+function bdevname:string(bdev:long)
+{
+ if (bdev == 0)
+ return "N/A"
+
+ hd = @cast(bdev, "block_device")->bd_disk
+
+ if (@cast(bdev, "block_device")->bd_part)
+ partno = @cast(bdev, "block_device")->bd_part->partno
+ else
+ partno = MINOR(@cast(bdev, "block_device")->bd_dev)
+ - @cast(bdev, "block_device")->bd_disk->first_minor;
+
+ if (!partno)
+ return kernel_string(@cast(hd, "gendisk")->disk_name)
+ disk_name = kernel_string(@cast(hd, "gendisk")->disk_name)
+ if (isdigit(substr(disk_name, strlen(disk_name) - 1, 1)))
+ return sprintf("%sp%d", disk_name, partno)
+ else
+ return sprintf("%s%d", disk_name, partno)
+}