summaryrefslogtreecommitdiff
path: root/sys/fs/devfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/fs/devfs.c')
-rw-r--r--sys/fs/devfs.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/sys/fs/devfs.c b/sys/fs/devfs.c
index 15a2864..1dfc10d 100644
--- a/sys/fs/devfs.c
+++ b/sys/fs/devfs.c
@@ -137,6 +137,8 @@ devfs_getattr(struct vop_getattr_args *args)
struct vnode *vp;
struct vattr *attr;
struct devfs_node *dnp;
+ struct bdevsw *bdev;
+ size_t size = 0;
vp = args->vp;
if ((dnp = vp->data) == NULL) {
@@ -146,6 +148,13 @@ devfs_getattr(struct vop_getattr_args *args)
return -EIO;
}
+ if (dnp->is_block) {
+ bdev = dev_get(dnp->major, dnp->dev);
+ if (bdev->bsize != NULL) {
+ size = bdev->bsize(dnp->dev);
+ }
+ }
+
/*
* Set stat attributes from device node structure
* found within vnode data.
@@ -154,7 +163,7 @@ devfs_getattr(struct vop_getattr_args *args)
* size is hardwired to 0.
*/
attr->mode = dnp->mode;
- attr->size = 0;
+ attr->size = size;
return 0;
}