summaryrefslogtreecommitdiffstats
path: root/sys/fs/devfs
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2008-01-07 20:05:19 +0000
committerjhb <jhb@FreeBSD.org>2008-01-07 20:05:19 +0000
commitf8a246b9791d1450cf4945cc7b38f651a3a456ee (patch)
tree4cf9280569e048ce55d457d60918586c5cf023e5 /sys/fs/devfs
parent1b130ab3271ae64d5c2979889a661e27bbe422d9 (diff)
downloadFreeBSD-src-f8a246b9791d1450cf4945cc7b38f651a3a456ee.zip
FreeBSD-src-f8a246b9791d1450cf4945cc7b38f651a3a456ee.tar.gz
Make ftruncate a 'struct file' operation rather than a vnode operation.
This makes it possible to support ftruncate() on non-vnode file types in the future. - 'struct fileops' grows a 'fo_truncate' method to handle an ftruncate() on a given file descriptor. - ftruncate() moves to kern/sys_generic.c and now just fetches a file object and invokes fo_truncate(). - The vnode-specific portions of ftruncate() move to vn_truncate() in vfs_vnops.c which implements fo_truncate() for vnode file types. - Non-vnode file types return EINVAL in their fo_truncate() method. Submitted by: rwatson
Diffstat (limited to 'sys/fs/devfs')
-rw-r--r--sys/fs/devfs/devfs_vnops.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/fs/devfs/devfs_vnops.c b/sys/fs/devfs/devfs_vnops.c
index 269f2c3..7c753f1 100644
--- a/sys/fs/devfs/devfs_vnops.c
+++ b/sys/fs/devfs/devfs_vnops.c
@@ -1278,6 +1278,13 @@ devfs_symlink(struct vop_symlink_args *ap)
return (devfs_allocv(de, ap->a_dvp->v_mount, ap->a_vpp, td));
}
+static int
+devfs_truncate_f(struct file *fp, off_t length, struct ucred *cred, struct thread *td)
+{
+
+ return (vnops.fo_truncate(fp, length, cred, td));
+}
+
/* ARGSUSED */
static int
devfs_write_f(struct file *fp, struct uio *uio, struct ucred *cred, int flags, struct thread *td)
@@ -1322,6 +1329,7 @@ dev2udev(struct cdev *x)
static struct fileops devfs_ops_f = {
.fo_read = devfs_read_f,
.fo_write = devfs_write_f,
+ .fo_truncate = devfs_truncate_f,
.fo_ioctl = devfs_ioctl_f,
.fo_poll = devfs_poll_f,
.fo_kqfilter = devfs_kqfilter_f,
OpenPOWER on IntegriCloud