mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-25 11:37:56 +00:00
Introduce a new optional memberfunction for cdevsw, fdopen() which
passes the fdidx from VOP_OPEN down. This is for all I know the final API for this functionality, but the locking semantics for messing with the filedescriptor from the device driver are not settled at this time.
This commit is contained in:
parent
79adbf76d0
commit
0023f61848
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=121121
sys
@ -196,9 +196,14 @@ spec_open(ap)
|
||||
VOP_UNLOCK(vp, 0, td);
|
||||
if(dsw->d_flags & D_NOGIANT) {
|
||||
DROP_GIANT();
|
||||
error = dsw->d_open(dev, ap->a_mode, S_IFCHR, td);
|
||||
if (dsw->d_fdopen != NULL)
|
||||
error = dsw->d_fdopen(dev, ap->a_mode, td, ap->a_fdidx);
|
||||
else
|
||||
error = dsw->d_open(dev, ap->a_mode, S_IFCHR, td);
|
||||
PICKUP_GIANT();
|
||||
} else
|
||||
} else if (dsw->d_fdopen != NULL)
|
||||
error = dsw->d_fdopen(dev, ap->a_mode, td, ap->a_fdidx);
|
||||
else
|
||||
error = dsw->d_open(dev, ap->a_mode, S_IFCHR, td);
|
||||
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
|
||||
|
||||
|
@ -145,6 +145,7 @@ struct knote;
|
||||
typedef struct thread d_thread_t;
|
||||
|
||||
typedef int d_open_t(dev_t dev, int oflags, int devtype, struct thread *td);
|
||||
typedef int d_fdopen_t(dev_t dev, int oflags, struct thread *td, int fdidx);
|
||||
typedef int d_close_t(dev_t dev, int fflag, int devtype, struct thread *td);
|
||||
typedef void d_strategy_t(struct bio *bp);
|
||||
typedef int d_ioctl_t(dev_t dev, u_long cmd, caddr_t data,
|
||||
@ -223,6 +224,7 @@ struct cdevsw {
|
||||
u_int d_flags;
|
||||
const char *d_name;
|
||||
d_open_t *d_open;
|
||||
d_fdopen_t *d_fdopen;
|
||||
d_close_t *d_close;
|
||||
d_read_t *d_read;
|
||||
d_write_t *d_write;
|
||||
|
@ -145,6 +145,7 @@ struct knote;
|
||||
typedef struct thread d_thread_t;
|
||||
|
||||
typedef int d_open_t(dev_t dev, int oflags, int devtype, struct thread *td);
|
||||
typedef int d_fdopen_t(dev_t dev, int oflags, struct thread *td, int fdidx);
|
||||
typedef int d_close_t(dev_t dev, int fflag, int devtype, struct thread *td);
|
||||
typedef void d_strategy_t(struct bio *bp);
|
||||
typedef int d_ioctl_t(dev_t dev, u_long cmd, caddr_t data,
|
||||
@ -223,6 +224,7 @@ struct cdevsw {
|
||||
u_int d_flags;
|
||||
const char *d_name;
|
||||
d_open_t *d_open;
|
||||
d_fdopen_t *d_fdopen;
|
||||
d_close_t *d_close;
|
||||
d_read_t *d_read;
|
||||
d_write_t *d_write;
|
||||
|
Loading…
Reference in New Issue
Block a user