From 50013e9da3036dbd8f36a2e1a8bfdc81d707d11f Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Mon, 18 Aug 2025 03:03:18 +0000 Subject: kernel: disk: Implement disk_query() Introduce disk_query() implementation which allows information about a specific disk to be retrieved. Signed-off-by: Ian Moffett --- sys/kern/kern_disk.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'sys/kern') diff --git a/sys/kern/kern_disk.c b/sys/kern/kern_disk.c index 5c09c81..a3fa05e 100644 --- a/sys/kern/kern_disk.c +++ b/sys/kern/kern_disk.c @@ -433,3 +433,43 @@ disk_write(diskid_t id, blkoff_t blk, const void *buf, size_t len) disk_buf_free(tmp); return retval; } + +/* + * Attempt to request attributes from a specific + * device. + * + * @id: ID of disk to query + * @res: Resulting information goes here + * + * This function returns zero on success, otherwise + * a less than zero value is returned. + */ +int +disk_query(diskid_t id, struct disk_info *res) +{ + const struct bdevsw *bdev; + struct disk *dp; + int error; + + if (res == NULL) { + return -EINVAL; + } + + /* Attempt to grab the disk */ + error = disk_get_id(id, &dp); + if (error < 0) { + pr_error("disk_query: bad disk ID %d\n", id); + return error; + } + + bdev = dp->bdev; + if (__unlikely(bdev == NULL)) { + pr_error("disk_query: no bdev for disk %d\n", id); + return -EIO; + } + + res->block_size = dp->bsize; + res->vblock_size = V_BSIZE; + res->n_block = bdev->bsize(dp->dev); + return 0; +} -- cgit v1.2.3