summaryrefslogtreecommitdiff
path: root/sys/fs
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-03-14 12:02:36 -0400
committerIan Moffett <ian@osmora.org>2025-03-14 12:02:36 -0400
commit509942a2f0167032e96b5130aebf95dfa1d14c4c (patch)
tree4737ad5b9e6675cd17034e3e53d76784287fd415 /sys/fs
parent6ceef43179c70852f001f1205ff92ebba4d0d4d7 (diff)
parentf7b53e3e49c428e7cee7ebe51ebcb261c9d4f02a (diff)
Merge branch 'expt'
Diffstat (limited to 'sys/fs')
-rw-r--r--sys/fs/devfs.c36
-rw-r--r--sys/fs/initramfs.c1
2 files changed, 37 insertions, 0 deletions
diff --git a/sys/fs/devfs.c b/sys/fs/devfs.c
index 0589bbe..024239d 100644
--- a/sys/fs/devfs.c
+++ b/sys/fs/devfs.c
@@ -63,6 +63,22 @@ bdevsw_read(void *devsw, dev_t dev, struct sio_txn *sio)
return bdevsw->read(dev, sio, 0);
}
+static inline int
+cdevsw_write(void *devsw, dev_t dev, struct sio_txn *sio)
+{
+ struct cdevsw *cdevsw = devsw;
+
+ return cdevsw->write(dev, sio, 0);
+}
+
+static inline int
+bdevsw_write(void *devsw, dev_t dev, struct sio_txn *sio)
+{
+ struct bdevsw *bdevsw = devsw;
+
+ return bdevsw->write(dev, sio, 0);
+}
+
/*
* Get a devfs node by name.
*
@@ -174,6 +190,25 @@ devfs_read(struct vnode *vp, struct sio_txn *sio)
}
static int
+devfs_write(struct vnode *vp, struct sio_txn *sio)
+{
+ struct devfs_node *dnp;
+ void *devsw;
+
+ if ((dnp = vp->data) == NULL)
+ return -EIO;
+
+ devsw = dev_get(dnp->major, dnp->dev);
+
+ if (!dnp->is_block) {
+ return cdevsw_write(devsw, dnp->dev, sio);
+ }
+
+ /* Block device */
+ return bdevsw_write(devsw, dnp->dev, sio);
+}
+
+static int
devfs_init(struct fs_info *fip)
{
struct vnode *vp;
@@ -232,6 +267,7 @@ const struct vops g_devfs_vops = {
.lookup = devfs_lookup,
.reclaim = devfs_reclaim,
.read = devfs_read,
+ .write = devfs_write,
.getattr = devfs_getattr
};
diff --git a/sys/fs/initramfs.c b/sys/fs/initramfs.c
index acef462..fd746ef 100644
--- a/sys/fs/initramfs.c
+++ b/sys/fs/initramfs.c
@@ -275,6 +275,7 @@ initramfs_init(struct fs_info *fip)
const struct vops g_initramfs_vops = {
.lookup = initramfs_lookup,
.read = initramfs_read,
+ .write = NULL,
.reclaim = initramfs_reclaim,
.getattr = initramfs_getattr
};