/*
* Get partition information for the component.
*/
- error = VOP_IOCTL(vp, DIOCGPART, (caddr_t)&dpart, FREAD, cred);
+ error = VOP_IOCTL(vp, DIOCGPART, (caddr_t)&dpart, FREAD,
+ cred, NULL);
if (error) {
#ifdef DEBUG
if (ccddebug & (CCDB_FOLLOW|CCDB_INIT))
return drive->lasterror;
drive->lasterror = VOP_IOCTL(drive->vp, DIOCGPART,
- (caddr_t)&drive->partinfo,
- FREAD|FWRITE, proc0.p_ucred);
+ (caddr_t)&drive->partinfo, FREAD|FWRITE,
+ proc0.p_ucred, NULL);
if (drive->lasterror) {
if (verbose)
log(LOG_WARNING,
error = 0;
#if 1
error = VOP_IOCTL(drive->vp, DIOCWLABEL,
- (caddr_t)&wlabel_on,
- FREAD|FWRITE, proc0.p_ucred);
+ (caddr_t)&wlabel_on, FREAD|FWRITE,
+ proc0.p_ucred, NULL);
#endif
if (error == 0)
error = write_drive(drive, (char *) vhdr, VINUMHEADERLEN, VINUM_LABEL_OFFSET);
#if 1
if (error == 0) {
error = VOP_IOCTL(drive->vp, DIOCWLABEL,
- (caddr_t)&wlabel_on,
- FREAD|FWRITE, proc0.p_ucred);
+ (caddr_t)&wlabel_on, FREAD|FWRITE,
+ proc0.p_ucred, NULL);
}
#endif
unlockdrive(drive);
map.a_data = (caddr_t)&vol;
map.a_fflag = -1;
map.a_cred = NULL;
+ map.a_sysmsg = NULL;
if (mixer_ioctl(&map) != 0)
device_printf(c->dev, "Soft PCM Volume: Failed to read default value\n");
left = vol & 0x7f;
fp = holdfp(p->p_fd, args->sysmsg_iresult, -1);
if (fp) {
if (fp->f_type == DTYPE_VNODE)
- fo_ioctl(fp, TIOCSCTTY, NULL, p->p_ucred);
+ fo_ioctl(fp, TIOCSCTTY, NULL, p->p_ucred, NULL);
fdrop(fp);
}
}
u_int32_t value;
int error;
- error = fo_ioctl(fp, DIOCGPART, (caddr_t)&dpart, cred);
+ error = fo_ioctl(fp, DIOCGPART, (caddr_t)&dpart, cred, NULL);
if (error)
return (error);
value = dpart.media_blocks; /* 64->32 */
struct linux_termios lios;
int error;
- error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bios, cred);
+ error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bios, cred, NULL);
if (error)
return (error);
bsd_to_linux_termios(&bios, &lios);
bcopy(data, &lios, sizeof(lios));
linux_to_bsd_termios(&lios, &bios);
- return (fo_ioctl(fp, TIOCSETA, (caddr_t)&bios, cred));
+ return (fo_ioctl(fp, TIOCSETA, (caddr_t)&bios, cred, NULL));
}
static int
bcopy(data, &lios, sizeof(lios));
linux_to_bsd_termios(&lios, &bios);
- return (fo_ioctl(fp, TIOCSETAW, (caddr_t)&bios, cred));
+ return (fo_ioctl(fp, TIOCSETAW, (caddr_t)&bios, cred, NULL));
}
static int
bcopy(data, &lios, sizeof(lios));
linux_to_bsd_termios(&lios, &bios);
- return (fo_ioctl(fp, TIOCSETAF, (caddr_t)&bios, cred));
+ return (fo_ioctl(fp, TIOCSETAF, (caddr_t)&bios, cred, NULL));
}
static int
struct linux_termio lio;
int error;
- error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bios, cred);
+ error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bios, cred, NULL);
if (error)
return (error);
bsd_to_linux_termio(&bios, &lio);
bcopy(data, &lio, sizeof(lio));
linux_to_bsd_termio(&lio, &bios);
- return (fo_ioctl(fp, TIOCSETA, (caddr_t)&bios, cred));
+ return (fo_ioctl(fp, TIOCSETA, (caddr_t)&bios, cred, NULL));
}
static int
bcopy(data, &lio, sizeof(lio));
linux_to_bsd_termio(&lio, &bios);
- return (fo_ioctl(fp, TIOCSETAW, (caddr_t)&bios, cred));
+ return (fo_ioctl(fp, TIOCSETAW, (caddr_t)&bios, cred, NULL));
}
static int
bcopy(data, &lio, sizeof(lio));
linux_to_bsd_termio(&lio, &bios);
- return (fo_ioctl(fp, TIOCSETAF, (caddr_t)&bios, cred));
+ return (fo_ioctl(fp, TIOCSETAF, (caddr_t)&bios, cred, NULL));
}
static int
struct termios bios;
int error, c;
- error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bios, cred);
+ error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bios, cred, NULL);
if (error)
return (error);
c = ((u_long)data == LINUX_TCIOFF) ? VSTOP : VSTART;
default:
return (EINVAL);
}
- return (fo_ioctl(fp, cmd, 0, cred));
+ return (fo_ioctl(fp, cmd, 0, cred, NULL));
}
static int
default:
return (EINVAL);
}
- return (fo_ioctl(fp, TIOCFLUSH, data, cred));
+ return (fo_ioctl(fp, TIOCFLUSH, data, cred, NULL));
}
static int
default:
return (EINVAL);
}
- return (fo_ioctl(fp, TIOCSETD, (caddr_t)&line, cred));
+ return (fo_ioctl(fp, TIOCSETD, (caddr_t)&line, cred, NULL));
}
static int
int linux_line, error;
int bsd_line = TTYDISC;
- error = fo_ioctl(fp, TIOCGETD, (caddr_t)&bsd_line, cred);
+ error = fo_ioctl(fp, TIOCGETD, (caddr_t)&bsd_line, cred, NULL);
if (error)
return (error);
switch (bsd_line) {
struct linux_cdrom_tochdr lth;
int error;
- error = fo_ioctl(fp, CDIOREADTOCHEADER, (caddr_t)&th, cred);
+ error = fo_ioctl(fp, CDIOREADTOCHEADER, (caddr_t)&th, cred, NULL);
if (error)
return (error);
lth.cdth_trk0 = th.starting_track;
irtse.address_format = ltep->cdte_format;
irtse.track = ltep->cdte_track;
- error = fo_ioctl(fp, CDIOREADTOCENTRY, (caddr_t)&irtse, cred);
+ error = fo_ioctl(fp, CDIOREADTOCENTRY, (caddr_t)&irtse, cred, NULL);
if (error)
return (error);
bsdsc.track = 0;
bsdsc.data_len = sizeof(struct cd_sub_channel_info);
bsdsc.data = bsdinfo;
- error = fo_ioctl(fp, CDIOCREADSUBCHANNEL, (caddr_t)&bsdsc, cred);
+ error = fo_ioctl(fp, CDIOCREADSUBCHANNEL, (caddr_t)&bsdsc, cred, NULL);
if (error)
return (error);
sc->cdsc_audiostatus = bsdinfo->header.audio_status;
default:
return (EINVAL);
}
- return (fo_ioctl(fp, KDSKBMODE, (caddr_t)&kbdmode, cred));
+ return (fo_ioctl(fp, KDSKBMODE, (caddr_t)&kbdmode, cred, NULL));
}
static int
if (!ISSIGVALID(mode->frsig) && ISSIGVALID(mode->acqsig))
mode->frsig = mode->acqsig;
- return (fo_ioctl(fp, VT_SETMODE, data, cred));
+ return (fo_ioctl(fp, VT_SETMODE, data, cred, NULL));
}
* we don't translate the ifname and
* use l_ifreq instead of ifreq
*/
- return (fo_ioctl(fp, SIOCGIFFLAGS, data, cred));
+ return (fo_ioctl(fp, SIOCGIFFLAGS, data, cred, NULL));
}
ifp = ifname_linux_to_bsd(ifr->ifr_name, ifname);
/* not a socket - probably a tap / vmnet device */
if (ocmd == LINUX_SIOCGIFADDR || ocmd == LINUX_SIOCSIFADDR) {
cmd = (ocmd == LINUX_SIOCGIFADDR) ? SIOCGIFADDR : SIOCSIFADDR;
- return (fo_ioctl(fp, cmd, data, cred));
+ return (fo_ioctl(fp, cmd, data, cred, NULL));
} else
return (ENOIOCTL);
}
lifname, oifname);
#endif
- error = fo_ioctl(fp, cmd, data, cred);
+ error = fo_ioctl(fp, cmd, data, cred, NULL);
clean_ifname:
bcopy(lifname, oifname, LINUX_IFNAMSIZ);
kprintf(ARGS(ioctl, "%d, %04x, *"), args->fd, args->cmd);
#endif
- return (mapped_ioctl(args->fd, args->cmd, (caddr_t)args->arg, &linux_ioctl_map));
+ return (mapped_ioctl(args->fd, args->cmd, (caddr_t)args->arg,
+ &linux_ioctl_map, &args->sysmsg));
}
SYSINIT (linux_ioctl_register, SI_BOOT2_KLD, SI_ORDER_MIDDLE,
};
static int badfo_readwrite (struct file *fp, struct uio *uio,
- struct ucred *cred, int flags);
+ struct ucred *cred, int flags);
static int badfo_ioctl (struct file *fp, u_long com, caddr_t data,
- struct ucred *cred);
+ struct ucred *cred, struct sysmsg *msg);
static int badfo_poll (struct file *fp, int events, struct ucred *cred);
static int badfo_kqfilter (struct file *fp, struct knote *kn);
static int badfo_stat (struct file *fp, struct stat *sb, struct ucred *cred);
error = EINVAL;
if (error == 0 && ((nflags ^ oflags) & FASYNC)) {
tmp = nflags & FASYNC;
- error = fo_ioctl(fp, FIOASYNC, (caddr_t)&tmp, cred);
+ error = fo_ioctl(fp, FIOASYNC, (caddr_t)&tmp,
+ cred, NULL);
}
if (error == 0)
fp->f_flag = nflags;
break;
case F_GETOWN:
- error = fo_ioctl(fp, FIOGETOWN, (caddr_t)&dat->fc_owner, cred);
+ error = fo_ioctl(fp, FIOGETOWN, (caddr_t)&dat->fc_owner,
+ cred, NULL);
break;
case F_SETOWN:
- error = fo_ioctl(fp, FIOSETOWN, (caddr_t)&dat->fc_owner, cred);
+ error = fo_ioctl(fp, FIOSETOWN, (caddr_t)&dat->fc_owner,
+ cred, NULL);
break;
case F_SETLKW:
* MPSAFE
*/
static int
-badfo_ioctl(struct file *fp, u_long com, caddr_t data, struct ucred *cred)
+badfo_ioctl(struct file *fp, u_long com, caddr_t data,
+ struct ucred *cred, struct sysmsg *msgv)
{
return (EBADF);
}
}
int
-dev_dioctl(cdev_t dev, u_long cmd, caddr_t data, int fflag, struct ucred *cred)
+dev_dioctl(cdev_t dev, u_long cmd, caddr_t data, int fflag, struct ucred *cred,
+ struct sysmsg *msg)
{
struct dev_ioctl_args ap;
ap.a_data = data;
ap.a_fflag = fflag;
ap.a_cred = cred;
+ ap.a_sysmsg = msg;
return(dev->si_ops->d_ioctl(&ap));
}
static int kqueue_write(struct file *fp, struct uio *uio,
struct ucred *cred, int flags);
static int kqueue_ioctl(struct file *fp, u_long com, caddr_t data,
- struct ucred *cred);
+ struct ucred *cred, struct sysmsg *msg);
static int kqueue_poll(struct file *fp, int events, struct ucred *cred);
static int kqueue_kqfilter(struct file *fp, struct knote *kn);
static int kqueue_stat(struct file *fp, struct stat *st,
* MPSAFE
*/
static int
-kqueue_ioctl(struct file *fp, u_long com, caddr_t data, struct ucred *cred)
+kqueue_ioctl(struct file *fp, u_long com, caddr_t data,
+ struct ucred *cred, struct sysmsg *msg)
{
struct kqueue *kq;
int error;
if (error)
return (error);
}
- error = dev_dioctl(dev, DIOCGPART, (void *)&pinfo, 0, proc0.p_ucred);
+ error = dev_dioctl(dev, DIOCGPART, (void *)&pinfo, 0,
+ proc0.p_ucred, NULL);
if (doopen)
dev_dclose(dev, FREAD, S_IFCHR);
if (error || pinfo.media_blocks == 0 || pinfo.media_blksize == 0)
static int slfileop_stat(struct file *fp, struct stat *sb, struct ucred *cred);
static int slfileop_shutdown(struct file *fp, int how);
static int slfileop_ioctl(struct file *fp, u_long cmd, caddr_t data,
- struct ucred *cred);
+ struct ucred *cred, struct sysmsg *msg);
static int slfileop_poll(struct file *fp, int events, struct ucred *cred);
static int slfileop_kqfilter(struct file *fp, struct knote *kn);
static
int
-slfileop_ioctl (struct file *fp, u_long cmd, caddr_t data, struct ucred *cred)
+slfileop_ioctl (struct file *fp, u_long cmd, caddr_t data,
+ struct ucred *cred, struct sysmsg *msg)
{
return(EINVAL);
}
int error;
bzero(&pinfo, sizeof(pinfo));
- error = dev_dioctl(dev, DIOCGPART, (void *)&pinfo, 0, proc0.p_ucred);
+ error = dev_dioctl(dev, DIOCGPART, (void *)&pinfo, 0,
+ proc0.p_ucred, NULL);
if (error)
return (error);
if (pinfo.media_blksize == 0)
if (error == ENOIOCTL) {
error = dev_dioctl(dp->d_rawdev, ap->a_cmd, ap->a_data,
- ap->a_fflag, ap->a_cred);
+ ap->a_fflag, ap->a_cred, NULL);
}
return (error);
}
int
sys_ioctl(struct ioctl_args *uap)
{
- return(mapped_ioctl(uap->fd, uap->com, uap->data, NULL));
+ return(mapped_ioctl(uap->fd, uap->com, uap->data, NULL, &uap->sysmsg));
}
struct ioctl_map_entry {
* and appropriate conversions/conversion functions will be utilized.
*/
int
-mapped_ioctl(int fd, u_long com, caddr_t uspc_data, struct ioctl_map *map)
+mapped_ioctl(int fd, u_long com, caddr_t uspc_data, struct ioctl_map *map,
+ struct sysmsg *msg)
{
struct thread *td = curthread;
struct proc *p = td->td_proc;
fp->f_flag |= FASYNC;
else
fp->f_flag &= ~FASYNC;
- error = fo_ioctl(fp, FIOASYNC, (caddr_t)&tmp, cred);
+ error = fo_ioctl(fp, FIOASYNC, (caddr_t)&tmp, cred, msg);
break;
default:
if (map != NULL && iomc->wrapfunc != NULL)
error = iomc->wrapfunc(fp, com, ocom, data, cred);
else
- error = fo_ioctl(fp, com, data, cred);
+ error = fo_ioctl(fp, com, data, cred, msg);
/*
* Copy any data to user, size was
* already set and checked above.
static int pipe_poll (struct file *fp, int events, struct ucred *cred);
static int pipe_kqfilter (struct file *fp, struct knote *kn);
static int pipe_stat (struct file *fp, struct stat *sb, struct ucred *cred);
-static int pipe_ioctl (struct file *fp, u_long cmd, caddr_t data, struct ucred *cred);
+static int pipe_ioctl (struct file *fp, u_long cmd, caddr_t data,
+ struct ucred *cred, struct sysmsg *msg);
static struct fileops pipeops = {
.fo_read = pipe_read,
* we implement a very minimal set of ioctls for compatibility with sockets.
*/
int
-pipe_ioctl(struct file *fp, u_long cmd, caddr_t data, struct ucred *cred)
+pipe_ioctl(struct file *fp, u_long cmd, caddr_t data,
+ struct ucred *cred, struct sysmsg *msg)
{
struct pipe *mpipe;
lwkt_tokref rlock;
* MPALMOSTSAFE - acquires mplock
*/
int
-soo_ioctl(struct file *fp, u_long cmd, caddr_t data, struct ucred *cred)
+soo_ioctl(struct file *fp, u_long cmd, caddr_t data,
+ struct ucred *cred, struct sysmsg *msg)
{
struct socket *so;
int error;
return (EINVAL);
}
}
- return (VOP_IOCTL(ttyvp, ap->a_cmd, ap->a_data, ap->a_fflag, ap->a_cred));
+ return (VOP_IOCTL(ttyvp, ap->a_cmd, ap->a_data, ap->a_fflag,
+ ap->a_cred, ap->a_sysmsg));
}
/*ARGSUSED*/
nfp->f_data = so;
/* Sync socket nonblocking/async state with file flags */
tmp = fflag & FNONBLOCK;
- (void) fo_ioctl(nfp, FIONBIO, (caddr_t)&tmp, p->p_ucred);
+ fo_ioctl(nfp, FIONBIO, (caddr_t)&tmp, p->p_ucred, NULL);
tmp = fflag & FASYNC;
- (void) fo_ioctl(nfp, FIOASYNC, (caddr_t)&tmp, p->p_ucred);
+ fo_ioctl(nfp, FIOASYNC, (caddr_t)&tmp, p->p_ucred, NULL);
sa = NULL;
error = soaccept(so, &sa);
static int vn_closefile (struct file *fp);
static int vn_ioctl (struct file *fp, u_long com, caddr_t data,
- struct ucred *cred);
+ struct ucred *cred, struct sysmsg *msg);
static int vn_read (struct file *fp, struct uio *uio,
struct ucred *cred, int flags);
static int vn_poll (struct file *fp, int events, struct ucred *cred);
* MPALMOSTSAFE - acquires mplock
*/
static int
-vn_ioctl(struct file *fp, u_long com, caddr_t data, struct ucred *ucred)
+vn_ioctl(struct file *fp, u_long com, caddr_t data, struct ucred *ucred,
+ struct sysmsg *msg)
{
struct vnode *vp = ((struct vnode *)fp->f_data);
struct vnode *ovp;
error = 0;
break;
}
- error = VOP_IOCTL(vp, com, data, fp->f_flag, ucred);
+ error = VOP_IOCTL(vp, com, data, fp->f_flag, ucred, msg);
if (error == 0 && com == TIOCSCTTY) {
struct proc *p = curthread->td_proc;
struct session *sess;
#include <sys/vmmeter.h>
#include <sys/vnode.h>
#include <sys/vfsops.h>
+#include <sys/sysmsg.h>
#include <machine/limits.h>
int
vop_ioctl(struct vop_ops *ops, struct vnode *vp, u_long command, caddr_t data,
- int fflag, struct ucred *cred)
+ int fflag, struct ucred *cred, struct sysmsg *msg)
{
struct vop_ioctl_args ap;
int error;
ap.a_data = data;
ap.a_fflag = fflag;
ap.a_cred = cred;
+ ap.a_sysmsg = msg;
DO_OPS(ops, error, &ap, vop_ioctl);
return(error);
static int cryptof_rw(struct file *fp, struct uio *uio,
struct ucred *cred, int flags);
-static int cryptof_ioctl(struct file *, u_long, caddr_t, struct ucred *);
+static int cryptof_ioctl(struct file *, u_long, caddr_t,
+ struct ucred *, struct sysmsg *);
static int cryptof_poll(struct file *, int, struct ucred *);
static int cryptof_kqfilter(struct file *, struct knote *);
static int cryptof_stat(struct file *, struct stat *, struct ucred *);
* MPALMOSTSAFE - acquires mplock
*/
static int
-cryptof_ioctl(
- struct file *fp,
- u_long cmd,
- caddr_t data,
- struct ucred *cred)
+cryptof_ioctl(struct file *fp, u_long cmd, caddr_t data,
+ struct ucred *cred, struct sysmsg *msg)
{
struct cryptoini cria, crie;
struct fcrypt *fcr;
/*
* int d_ioctl(cdev_t dev, u_long cmd, caddr_t data, int fflag,
- * struct ucred *cred)
+ * struct ucred *cred, struct sysmsg *msg)
*/
struct dev_ioctl_args {
struct dev_generic_args a_head;
caddr_t a_data;
int a_fflag;
struct ucred *a_cred;
+ struct sysmsg *a_sysmsg;
};
/*
extern struct dev_ops dead_dev_ops;
struct disk;
+struct sysmsg;
int dev_dopen(cdev_t dev, int oflags, int devtype, struct ucred *cred);
int dev_dclose(cdev_t dev, int fflag, int devtype);
void dev_dstrategy(cdev_t dev, struct bio *bio);
void dev_dstrategy_chain(cdev_t dev, struct bio *bio);
int dev_dioctl(cdev_t dev, u_long cmd, caddr_t data, int fflag,
- struct ucred *cred);
+ struct ucred *cred, struct sysmsg *msg);
int dev_ddump(cdev_t dev);
int64_t dev_dpsize(cdev_t dev);
int dev_dread(cdev_t dev, struct uio *uio, int ioflag);
struct vnode;
struct lwkt_port;
struct namecache;
+struct sysmsg;
struct fileops {
int (*fo_read) (struct file *fp, struct uio *uio,
int (*fo_write) (struct file *fp, struct uio *uio,
struct ucred *cred, int flags);
int (*fo_ioctl) (struct file *fp, u_long com, caddr_t data,
- struct ucred *cred);
+ struct ucred *cred, struct sysmsg *msg);
int (*fo_poll) (struct file *fp, int events,
struct ucred *cred);
int (*fo_kqfilter)(struct file *fp, struct knote *kn);
struct file *fp,
u_long com,
caddr_t data,
- struct ucred *cred
+ struct ucred *cred,
+ struct sysmsg *msg
) {
int error;
fhold(fp);
- error = (*fp->f_ops->fo_ioctl)(fp, com, data, cred);
+ error = (*fp->f_ops->fo_ioctl)(fp, com, data, cred, msg);
fdrop(fp);
return (error);
}
struct ioctl_map_range *cmd_ranges;
};
-int mapped_ioctl(int fd, u_long com, caddr_t uspc_data, struct ioctl_map *map);
+int mapped_ioctl(int fd, u_long com, caddr_t uspc_data,
+ struct ioctl_map *map, struct sysmsg *msg);
int mapped_ioctl_register_handler(struct ioctl_map_handler *he);
int mapped_ioctl_unregister_handler(struct ioctl_map_handler *he);
struct ucred;
struct uio;
struct knote;
+struct sysmsg;
/*
* File operations on sockets.
*/
int soo_read (struct file *fp, struct uio *uio, struct ucred *cred,
- int flags);
+ int flags);
int soo_write (struct file *fp, struct uio *uio, struct ucred *cred,
- int flags);
+ int flags);
int soo_close (struct file *fp);
int soo_shutdown (struct file *fp, int how);
int soo_ioctl (struct file *fp, u_long cmd, caddr_t data,
- struct ucred *cred);
+ struct ucred *cred, struct sysmsg *msg);
int soo_poll (struct file *fp, int events, struct ucred *cred);
int soo_stat (struct file *fp, struct stat *ub, struct ucred *cred);
int sokqfilter (struct file *fp, struct knote *kn);
caddr_t a_data;
int a_fflag;
struct ucred *a_cred;
+ struct sysmsg *a_sysmsg;
};
struct vop_poll_args {
int vop_write(struct vop_ops *ops, struct vnode *vp, struct uio *uio,
int ioflag, struct ucred *cred);
int vop_ioctl(struct vop_ops *ops, struct vnode *vp, u_long command,
- caddr_t data, int fflag, struct ucred *cred);
+ caddr_t data, int fflag, struct ucred *cred,
+ struct sysmsg *msg);
int vop_poll(struct vop_ops *ops, struct vnode *vp, int events,
struct ucred *cred);
int vop_kqfilter(struct vop_ops *ops, struct vnode *vp, struct knote *kn);
vop_read(*(vp)->v_ops, vp, uio, ioflag, cred)
#define VOP_WRITE(vp, uio, ioflag, cred) \
vop_write(*(vp)->v_ops, vp, uio, ioflag, cred)
-#define VOP_IOCTL(vp, command, data, fflag, cred) \
- vop_ioctl(*(vp)->v_ops, vp, command, data, fflag, cred)
+#define VOP_IOCTL(vp, command, data, fflag, cred, msg) \
+ vop_ioctl(*(vp)->v_ops, vp, command, data, fflag, cred, msg)
#define VOP_POLL(vp, events, cred) \
vop_poll(*(vp)->v_ops, vp, events, cred)
#define VOP_KQFILTER(vp, kn) \
static int devfs_specf_stat(struct file *, struct stat *, struct ucred *);
static int devfs_specf_kqfilter(struct file *, struct knote *);
static int devfs_specf_poll(struct file *, int, struct ucred *);
-static int devfs_specf_ioctl(struct file *, u_long, caddr_t, struct ucred *);
-
-
+static int devfs_specf_ioctl(struct file *, u_long, caddr_t,
+ struct ucred *, struct sysmsg *);
static __inline int sequential_heuristic(struct uio *, struct file *);
-extern struct lock devfs_lock;
+
+extern struct lock devfs_lock;
/*
* devfs vnode operations for regular files
* MPALMOSTSAFE - acquires mplock
*/
static int
-devfs_specf_ioctl(struct file *fp, u_long com, caddr_t data, struct ucred *ucred)
+devfs_specf_ioctl(struct file *fp, u_long com, caddr_t data,
+ struct ucred *ucred, struct sysmsg *msg)
{
struct devfs_node *node;
struct vnode *vp;
goto out;
}
reference_dev(dev);
- error = dev_dioctl(dev, com, data, fp->f_flag, ucred);
+ error = dev_dioctl(dev, com, data, fp->f_flag, ucred, msg);
release_dev(dev);
#if 0
if (node) {
* Device ioctl operation.
*
* spec_ioctl(struct vnode *a_vp, int a_command, caddr_t a_data,
- * int a_fflag, struct ucred *a_cred)
+ * int a_fflag, struct ucred *a_cred, struct sysmsg *msg)
*/
static int
devfs_spec_ioctl(struct vop_ioctl_args *ap)
}
#endif
- return (dev_dioctl(dev, ap->a_command, ap->a_data,
- ap->a_fflag, ap->a_cred));
+ return (dev_dioctl(dev, ap->a_command, ap->a_data, ap->a_fflag,
+ ap->a_cred, ap->a_sysmsg));
}
/*
* Device ioctl operation.
*
* fifo_ioctl(struct vnode *a_vp, int a_command, caddr_t a_data, int a_fflag,
- * struct ucred *a_cred)
+ * struct ucred *a_cred, struct sysmsg *a_sysmsg)
*/
/* ARGSUSED */
static int
if (ap->a_fflag & FREAD) {
filetmp.f_data = ap->a_vp->v_fifoinfo->fi_readsock;
- error = soo_ioctl(&filetmp, ap->a_command, ap->a_data, ap->a_cred);
+ error = soo_ioctl(&filetmp, ap->a_command, ap->a_data,
+ ap->a_cred, ap->a_sysmsg);
if (error)
return (error);
}
if (ap->a_fflag & FWRITE) {
filetmp.f_data = ap->a_vp->v_fifoinfo->fi_writesock;
- error = soo_ioctl(&filetmp, ap->a_command, ap->a_data, ap->a_cred);
+ error = soo_ioctl(&filetmp, ap->a_command, ap->a_data,
+ ap->a_cred, ap->a_sysmsg);
if (error)
return (error);
}
mp->mnt_iosize_max = dev->si_iosize_max;
if (mp->mnt_iosize_max > MAXPHYS)
mp->mnt_iosize_max = MAXPHYS;
- if (VOP_IOCTL(devvp, DIOCGPART, (caddr_t)&dpart, FREAD, cred) != 0) {
+ if (VOP_IOCTL(devvp, DIOCGPART, (caddr_t)&dpart, FREAD,
+ cred, NULL) != 0) {
size = DEV_BSIZE;
} else {
size = dpart.media_blksize;
struct ioc_read_toc_single_entry t;
int i;
- if (dev_dioctl(dev, CDIOREADTOCHEADER, (caddr_t)&h, FREAD, proc0.p_ucred) != 0)
+ if (dev_dioctl(dev, CDIOREADTOCHEADER, (caddr_t)&h, FREAD,
+ proc0.p_ucred, NULL) != 0)
return 0;
for (i = h.ending_track; i >= 0; i--) {
t.address_format = CD_LBA_FORMAT;
t.track = i;
- if (dev_dioctl(dev, CDIOREADTOCENTRY, (caddr_t)&t, FREAD, proc0.p_ucred) != 0) {
+ if (dev_dioctl(dev, CDIOREADTOCENTRY, (caddr_t)&t, FREAD,
+ proc0.p_ucred, NULL) != 0) {
return 0;
}
if ((t.entry.control & 4) != 0)
/*
* Step 2: re-read superblock from disk.
*/
- if (VOP_IOCTL(devvp, DIOCGPART, (caddr_t)&dpart, FREAD, cred) != 0)
+ if (VOP_IOCTL(devvp, DIOCGPART, (caddr_t)&dpart, FREAD,
+ cred, NULL) != 0) {
size = DEV_BSIZE;
- else
+ } else {
size = dpart.media_blksize;
+ }
if ((error = bread(devvp, SBOFF, SBSIZE, &bp)) != 0) {
brelse(bp);
return (error);
if (devvp->v_object == NULL)
panic("ffs_reload: devvp has no VM object!");
- if (VOP_IOCTL(devvp, DIOCGPART, (caddr_t)&dpart, FREAD, proc0.p_ucred) != 0)
+ if (VOP_IOCTL(devvp, DIOCGPART, (caddr_t)&dpart, FREAD,
+ proc0.p_ucred, NULL) != 0) {
size = DEV_BSIZE;
- else
+ } else {
size = dpart.media_blksize;
+ }
bp = NULL;
ump = NULL;