Adosfs prototyping changes.
This commit is contained in:
parent
09afd77655
commit
2140eeda0f
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: adlookup.c,v 1.10 1995/08/18 15:14:33 chopps Exp $ */
|
||||
/* $NetBSD: adlookup.c,v 1.11 1996/02/09 19:06:38 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994 Christian E. Hopps
|
||||
|
@ -42,26 +42,8 @@
|
|||
#define strmatch(s1, l1, s2, l2) \
|
||||
((l1) == (l2) && bcmp((s1), (s2), (l1)) == 0)
|
||||
#else
|
||||
int
|
||||
strmatch(s1, l1, s2, l2)
|
||||
char *s1, *s2;
|
||||
int l1, l2;
|
||||
{
|
||||
if (l1 != l2)
|
||||
return 0;
|
||||
while (--l1 >= 0) {
|
||||
char c;
|
||||
c = *s1++;
|
||||
if (c != *s2) {
|
||||
if (c >= 'A' && c <= 'Z' && c + ('a' - 'A') != *s2)
|
||||
return 0;
|
||||
if (c >= 'a' && c <= 'z' && c + ('A' - 'a') != *s2)
|
||||
return 0;
|
||||
}
|
||||
++s2;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
#define strmatch(s1, l1, s2, l2) \
|
||||
((l1) == (l2) && strncasecmp((s1), (s2), (l1)) == 0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@ -76,13 +58,14 @@ strmatch(s1, l1, s2, l2)
|
|||
* LOOKUP always unlocks parent if last element. (not now!?!?)
|
||||
*/
|
||||
int
|
||||
adosfs_lookup(sp)
|
||||
adosfs_lookup(v)
|
||||
void *v;
|
||||
{
|
||||
struct vop_lookup_args /* {
|
||||
struct vnode *a_dvp;
|
||||
struct vnode **a_vpp;
|
||||
struct componentname *a_cnp;
|
||||
} */ *sp;
|
||||
{
|
||||
} */ *sp = v;
|
||||
int nameiop, last, lockp, wantp, flags, error, vpid, nocache, i;
|
||||
struct componentname *cnp;
|
||||
struct vnode **vpp; /* place to store result */
|
||||
|
@ -117,7 +100,7 @@ adosfs_lookup(sp)
|
|||
*/
|
||||
if (vdp->v_type != VDIR)
|
||||
return (ENOTDIR);
|
||||
if (error = VOP_ACCESS(vdp, VEXEC, ucp, cnp->cn_proc))
|
||||
if ((error = VOP_ACCESS(vdp, VEXEC, ucp, cnp->cn_proc)) != 0)
|
||||
return (error);
|
||||
/*
|
||||
* cache lookup algorithm borrowed from ufs_lookup()
|
||||
|
@ -150,7 +133,7 @@ adosfs_lookup(sp)
|
|||
VOP_UNLOCK(vdp);
|
||||
}
|
||||
*vpp = NULL;
|
||||
if (error = VOP_LOCK(vdp))
|
||||
if ((error = VOP_LOCK(vdp)) != 0)
|
||||
return (error);
|
||||
}
|
||||
|
||||
|
@ -185,7 +168,8 @@ adosfs_lookup(sp)
|
|||
*
|
||||
*/
|
||||
VOP_UNLOCK(vdp); /* race */
|
||||
if (error = VFS_VGET(vdp->v_mount, (ino_t)adp->pblock, vpp))
|
||||
if ((error = VFS_VGET(vdp->v_mount,
|
||||
(ino_t)adp->pblock, vpp)) != 0)
|
||||
VOP_LOCK(vdp);
|
||||
else if (last && lockp && (error = VOP_LOCK(vdp)))
|
||||
vput(*vpp);
|
||||
|
@ -205,7 +189,7 @@ adosfs_lookup(sp)
|
|||
bn = adp->tab[hval];
|
||||
i = min(adp->tabi[hval], 0);
|
||||
while (bn != 0) {
|
||||
if (error = VFS_VGET(vdp->v_mount, (ino_t)bn, vpp)) {
|
||||
if ((error = VFS_VGET(vdp->v_mount, (ino_t)bn, vpp)) != 0) {
|
||||
#ifdef ADOSFS_DIAGNOSTIC
|
||||
printf("[aget] %d)", error);
|
||||
#endif
|
||||
|
@ -238,7 +222,7 @@ adosfs_lookup(sp)
|
|||
* not found
|
||||
*/
|
||||
if ((nameiop == CREATE || nameiop == RENAME) && last) {
|
||||
if (error = VOP_ACCESS(vdp, VWRITE, ucp, cnp->cn_proc)) {
|
||||
if ((error = VOP_ACCESS(vdp, VWRITE, ucp, cnp->cn_proc)) != 0) {
|
||||
#ifdef ADOSFS_DIAGNOSTIC
|
||||
printf("[VOP_ACCESS] %d)", error);
|
||||
#endif
|
||||
|
@ -261,7 +245,7 @@ adosfs_lookup(sp)
|
|||
|
||||
found:
|
||||
if (nameiop == DELETE && last) {
|
||||
if (error = VOP_ACCESS(vdp, VWRITE, ucp, cnp->cn_proc)) {
|
||||
if ((error = VOP_ACCESS(vdp, VWRITE, ucp, cnp->cn_proc)) != 0) {
|
||||
if (vdp != *vpp)
|
||||
vput(*vpp);
|
||||
*vpp = NULL;
|
||||
|
@ -272,7 +256,7 @@ found:
|
|||
if (nameiop == RENAME && wantp && last) {
|
||||
if (vdp == *vpp)
|
||||
return(EISDIR);
|
||||
if (error = VOP_ACCESS(vdp, VWRITE, ucp, cnp->cn_proc)) {
|
||||
if ((error = VOP_ACCESS(vdp, VWRITE, ucp, cnp->cn_proc)) != 0) {
|
||||
vput(*vpp);
|
||||
*vpp = NULL;
|
||||
return (error);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: adosfs.h,v 1.8 1995/08/18 15:14:35 chopps Exp $ */
|
||||
/* $NetBSD: adosfs.h,v 1.9 1996/02/09 19:06:39 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994 Christian E. Hopps
|
||||
|
@ -124,11 +124,13 @@ struct adosfsmount {
|
|||
long adoswordn __P((struct buf *, int));
|
||||
long adoscksum __P((struct buf *, long));
|
||||
int adoshash __P((const char *, int, int));
|
||||
int adunixprot __P((int));
|
||||
int adosfs_getblktype __P((struct adosfsmount *, struct buf *));
|
||||
|
||||
struct vnode *adosfs_ahashget __P((struct mount *, ino_t));
|
||||
void adosfs_ainshash __P((struct adosfsmount *, struct anode *));
|
||||
void adosfs_aremhash __P((struct anode *));
|
||||
|
||||
int adosfs_lookup __P((struct vop_lookup_args *));
|
||||
int adosfs_lookup __P((void *));
|
||||
|
||||
int (**adosfs_vnodeop_p)();
|
||||
int (**adosfs_vnodeop_p) __P((void *));
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: adutil.c,v 1.7 1995/01/18 09:17:33 mycroft Exp $ */
|
||||
/* $NetBSD: adutil.c,v 1.8 1996/02/09 19:06:41 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994 Christian E. Hopps
|
||||
|
@ -33,6 +33,7 @@
|
|||
#include <sys/vnode.h>
|
||||
#include <sys/mount.h>
|
||||
#include <sys/proc.h>
|
||||
#include <sys/systm.h>
|
||||
#include <sys/malloc.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/queue.h>
|
||||
|
@ -43,6 +44,7 @@
|
|||
* look for anode in the mount's hash table, return locked.
|
||||
*/
|
||||
#define AHASH(an) ((an) & (ANODEHASHSZ - 1))
|
||||
static int toupper __P((int));
|
||||
|
||||
struct vnode *
|
||||
adosfs_ahashget(mp, an)
|
||||
|
@ -143,9 +145,9 @@ adunixprot(adprot)
|
|||
}
|
||||
}
|
||||
|
||||
static char
|
||||
static int
|
||||
toupper(ch)
|
||||
char ch;
|
||||
int ch;
|
||||
{
|
||||
if (ch >= 'a' && ch <= 'z')
|
||||
return(ch & ~(0x20));
|
||||
|
@ -180,6 +182,7 @@ adoshash(nam, namlen, nelt)
|
|||
return(val % nelt);
|
||||
}
|
||||
|
||||
#ifdef notyet
|
||||
/*
|
||||
* datestamp is local time, tv is to be UTC
|
||||
*/
|
||||
|
@ -199,6 +202,7 @@ tvtods(tvp, dsp)
|
|||
struct datestamp *dsp;
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
long
|
||||
adoswordn(bp, wn)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: advfsops.c,v 1.15 1995/11/30 00:56:23 jtc Exp $ */
|
||||
/* $NetBSD: advfsops.c,v 1.16 1996/02/09 19:06:42 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994 Christian E. Hopps
|
||||
|
@ -45,6 +45,22 @@
|
|||
#include <sys/buf.h>
|
||||
#include <adosfs/adosfs.h>
|
||||
|
||||
void adosfs_init __P((void));
|
||||
int adosfs_mount __P((struct mount *, char *, caddr_t, struct nameidata *,
|
||||
struct proc *));
|
||||
int adosfs_start __P((struct mount *, int, struct proc *));
|
||||
int adosfs_unmount __P((struct mount *, int, struct proc *));
|
||||
int adosfs_root __P((struct mount *, struct vnode **));
|
||||
int adosfs_quotactl __P((struct mount *, int, uid_t, caddr_t, struct proc *));
|
||||
int adosfs_statfs __P((struct mount *, struct statfs *, struct proc *));
|
||||
int adosfs_sync __P((struct mount *, int, struct ucred *, struct proc *));
|
||||
int adosfs_vget __P((struct mount *, ino_t, struct vnode **));
|
||||
int adosfs_fhtovp __P((struct mount *, struct fid *, struct mbuf *,
|
||||
struct vnode **, int *, struct ucred **));
|
||||
int adosfs_vptofh __P((struct vnode *, struct fid *));
|
||||
|
||||
int adosfs_mountfs __P((struct vnode *, struct mount *, struct proc *));
|
||||
|
||||
int
|
||||
adosfs_mount(mp, path, data, ndp, p)
|
||||
struct mount *mp;
|
||||
|
@ -60,7 +76,8 @@ adosfs_mount(mp, path, data, ndp, p)
|
|||
int error;
|
||||
mode_t accessmode;
|
||||
|
||||
if (error = copyin(data, (caddr_t)&args, sizeof(struct adosfs_args)))
|
||||
error = copyin(data, (caddr_t)&args, sizeof(struct adosfs_args));
|
||||
if (error)
|
||||
return(error);
|
||||
|
||||
#if 0
|
||||
|
@ -83,7 +100,7 @@ adosfs_mount(mp, path, data, ndp, p)
|
|||
* and verify that it refers to a sensible block device.
|
||||
*/
|
||||
NDINIT(ndp, LOOKUP, FOLLOW, UIO_USERSPACE, args.fspec, p);
|
||||
if (error = namei(ndp))
|
||||
if ((error = namei(ndp)) != 0)
|
||||
return (error);
|
||||
devvp = ndp->ni_vp;
|
||||
|
||||
|
@ -104,14 +121,15 @@ adosfs_mount(mp, path, data, ndp, p)
|
|||
if ((mp->mnt_flag & MNT_RDONLY) == 0)
|
||||
accessmode |= VWRITE;
|
||||
VOP_LOCK(devvp);
|
||||
if (error = VOP_ACCESS(devvp, accessmode, p->p_ucred, p)) {
|
||||
error = VOP_ACCESS(devvp, accessmode, p->p_ucred, p);
|
||||
if (error) {
|
||||
vput(devvp);
|
||||
return (error);
|
||||
}
|
||||
VOP_UNLOCK(devvp);
|
||||
}
|
||||
/* MNT_UPDATE? */
|
||||
if (error = adosfs_mountfs(devvp, mp, p)) {
|
||||
if ((error = adosfs_mountfs(devvp, mp, p)) != 0) {
|
||||
vrele(devvp);
|
||||
return (error);
|
||||
}
|
||||
|
@ -148,19 +166,20 @@ adosfs_mountfs(devvp, mp, p)
|
|||
* (except for root, which might share swap device for miniroot).
|
||||
* Flush out any old buffers remaining from a previous use.
|
||||
*/
|
||||
if (error = vfs_mountedon(devvp))
|
||||
if ((error = vfs_mountedon(devvp)) != 0)
|
||||
return (error);
|
||||
if (vcount(devvp) > 1 && devvp != rootvp)
|
||||
return (EBUSY);
|
||||
if (error = vinvalbuf(devvp, V_SAVE, p->p_ucred, p, 0, 0))
|
||||
if ((error = vinvalbuf(devvp, V_SAVE, p->p_ucred, p, 0, 0)) != 0)
|
||||
return (error);
|
||||
|
||||
/*
|
||||
* open blkdev and read root block
|
||||
*/
|
||||
if (error = VOP_OPEN(devvp, FREAD, NOCRED, p))
|
||||
if ((error = VOP_OPEN(devvp, FREAD, NOCRED, p)) != 0)
|
||||
return (error);
|
||||
if (error = VOP_IOCTL(devvp, DIOCGDINFO,(caddr_t)&dl, FREAD, NOCRED, p))
|
||||
error = VOP_IOCTL(devvp, DIOCGDINFO,(caddr_t)&dl, FREAD, NOCRED, p);
|
||||
if (error)
|
||||
goto fail;
|
||||
|
||||
parp = &dl.d_partitions[part];
|
||||
|
@ -190,7 +209,7 @@ adosfs_mountfs(devvp, mp, p)
|
|||
/*
|
||||
* get the root anode, if not a valid fs this will fail.
|
||||
*/
|
||||
if (error = VFS_ROOT(mp, &rvp))
|
||||
if ((error = VFS_ROOT(mp, &rvp)) != 0)
|
||||
goto fail;
|
||||
vput(rvp);
|
||||
|
||||
|
@ -225,7 +244,7 @@ adosfs_unmount(mp, mntflags, p)
|
|||
flags = 0;
|
||||
if (mntflags & MNT_FORCE)
|
||||
flags |= FORCECLOSE;
|
||||
if (error = vflush(mp, NULLVP, flags))
|
||||
if ((error = vflush(mp, NULLVP, flags)) != 0)
|
||||
return (error);
|
||||
amp = VFSTOADOSFS(mp);
|
||||
amp->devvp->v_specflags &= ~SI_MOUNTEDON;
|
||||
|
@ -245,7 +264,7 @@ adosfs_root(mp, vpp)
|
|||
struct vnode *nvp;
|
||||
int error;
|
||||
|
||||
if (error = VFS_VGET(mp, (ino_t)VFSTOADOSFS(mp)->rootb, &nvp))
|
||||
if ((error = VFS_VGET(mp, (ino_t)VFSTOADOSFS(mp)->rootb, &nvp)) != 0)
|
||||
return (error);
|
||||
*vpp = nvp;
|
||||
return (0);
|
||||
|
@ -300,10 +319,11 @@ adosfs_vget(mp, an, vpp)
|
|||
/*
|
||||
* check hash table. we are done if found
|
||||
*/
|
||||
if (*vpp = adosfs_ahashget(mp, an))
|
||||
if ((*vpp = adosfs_ahashget(mp, an)) != NULL)
|
||||
return (0);
|
||||
|
||||
if (error = getnewvnode(VT_ADOSFS, mp, adosfs_vnodeop_p, &vp))
|
||||
error = getnewvnode(VT_ADOSFS, mp, adosfs_vnodeop_p, &vp);
|
||||
if (error)
|
||||
return (error);
|
||||
|
||||
/*
|
||||
|
@ -317,7 +337,7 @@ adosfs_vget(mp, an, vpp)
|
|||
ap->nwords = amp->nwords;
|
||||
adosfs_ainshash(amp, ap);
|
||||
|
||||
if (error = bread(amp->devvp, an, amp->bsize, NOCRED, &bp)) {
|
||||
if ((error = bread(amp->devvp, an, amp->bsize, NOCRED, &bp)) != 0) {
|
||||
vput(vp);
|
||||
return (error);
|
||||
}
|
||||
|
@ -495,7 +515,9 @@ adosfs_fhtovp(mp, fhp, nam, vpp, exflagsp, credanonp)
|
|||
{
|
||||
struct ifid *ifhp = (struct ifid *)fhp;
|
||||
struct adosfsmount *amp = VFSTOADOSFS(mp);
|
||||
#if 0
|
||||
struct anode *ap;
|
||||
#endif
|
||||
struct netcred *np;
|
||||
struct vnode *nvp;
|
||||
int error;
|
||||
|
@ -511,7 +533,7 @@ adosfs_fhtovp(mp, fhp, nam, vpp, exflagsp, credanonp)
|
|||
if (np == NULL)
|
||||
return (EACCES);
|
||||
|
||||
if (error = VFS_VGET(mp, ifhp->ifid_ino, &nvp)) {
|
||||
if ((error = VFS_VGET(mp, ifhp->ifid_ino, &nvp)) != 0) {
|
||||
*vpp = NULLVP;
|
||||
return (error);
|
||||
}
|
||||
|
@ -561,9 +583,11 @@ adosfs_quotactl(mp, cmds, uid, arg, p)
|
|||
}
|
||||
|
||||
int
|
||||
adosfs_sync(mp, waitfor)
|
||||
adosfs_sync(mp, waitfor, uc, p)
|
||||
struct mount *mp;
|
||||
int waitfor;
|
||||
struct ucred *uc;
|
||||
struct proc *p;
|
||||
{
|
||||
#ifdef ADOSFS_DIAGNOSTIC
|
||||
printf("ad_sync(%x, %x)\n", mp, waitfor);
|
||||
|
@ -571,10 +595,9 @@ adosfs_sync(mp, waitfor)
|
|||
return(0);
|
||||
}
|
||||
|
||||
int
|
||||
void
|
||||
adosfs_init()
|
||||
{
|
||||
return(0);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: advnops.c,v 1.24 1996/02/09 14:45:40 mycroft Exp $ */
|
||||
/* $NetBSD: advnops.c,v 1.25 1996/02/09 19:06:43 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994 Christian E. Hopps
|
||||
|
@ -41,21 +41,119 @@
|
|||
#include <sys/malloc.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/unistd.h>
|
||||
#include <sys/proc.h>
|
||||
#include <miscfs/specfs/specdev.h>
|
||||
#include <adosfs/adosfs.h>
|
||||
|
||||
extern struct vnodeops adosfs_vnodeops;
|
||||
|
||||
int adosfs_open __P((void *));
|
||||
int adosfs_getattr __P((void *));
|
||||
int adosfs_read __P((void *));
|
||||
int adosfs_write __P((void *));
|
||||
int adosfs_ioctl __P((void *));
|
||||
int adosfs_select __P((void *));
|
||||
int adosfs_strategy __P((void *));
|
||||
int adosfs_lock __P((void *));
|
||||
int adosfs_unlock __P((void *));
|
||||
int adosfs_bmap __P((void *));
|
||||
int adosfs_print __P((void *));
|
||||
int adosfs_readdir __P((void *));
|
||||
int adosfs_access __P((void *));
|
||||
int adosfs_readlink __P((void *));
|
||||
int adosfs_inactive __P((void *));
|
||||
int adosfs_islocked __P((void *));
|
||||
int adosfs_reclaim __P((void *));
|
||||
int adosfs_pathconf __P((void *));
|
||||
int adnullop __P((void *));
|
||||
int adenotsup __P((void *));
|
||||
|
||||
#define adosfs_close adnullop
|
||||
#define adosfs_fsync adnullop
|
||||
#ifdef NFSSERVER
|
||||
int lease_check __P((void *));
|
||||
#define adosfs_lease_check lease_check
|
||||
#else
|
||||
#define adosfs_lease_check adnullop
|
||||
#endif
|
||||
#define adosfs_seek adnullop
|
||||
#define adosfs_vfree adnullop
|
||||
|
||||
#define adosfs_advlock adenotsup
|
||||
#define adosfs_blkatoff adenotsup
|
||||
#define adosfs_bwrite adenotsup
|
||||
#define adosfs_create adenotsup
|
||||
#define adosfs_mkdir adenotsup
|
||||
#define adosfs_mknod adenotsup
|
||||
#define adosfs_mmap adenotsup
|
||||
#define adosfs_remove adenotsup
|
||||
#define adosfs_rename adenotsup
|
||||
#define adosfs_rmdir adenotsup
|
||||
#define adosfs_setattr adenotsup
|
||||
#define adosfs_truncate adenotsup
|
||||
#define adosfs_update adenotsup
|
||||
#define adosfs_valloc adenotsup
|
||||
|
||||
struct vnodeopv_entry_desc adosfs_vnodeop_entries[] = {
|
||||
{ &vop_default_desc, vn_default_error },
|
||||
{ &vop_lookup_desc, adosfs_lookup }, /* lookup */
|
||||
{ &vop_create_desc, adosfs_create }, /* create */
|
||||
{ &vop_mknod_desc, adosfs_mknod }, /* mknod */
|
||||
{ &vop_open_desc, adosfs_open }, /* open */
|
||||
{ &vop_close_desc, adosfs_close }, /* close */
|
||||
{ &vop_access_desc, adosfs_access }, /* access */
|
||||
{ &vop_getattr_desc, adosfs_getattr }, /* getattr */
|
||||
{ &vop_setattr_desc, adosfs_setattr }, /* setattr */
|
||||
{ &vop_read_desc, adosfs_read }, /* read */
|
||||
{ &vop_write_desc, adosfs_write }, /* write */
|
||||
{ &vop_lease_desc, adosfs_lease_check }, /* lease */
|
||||
{ &vop_ioctl_desc, adosfs_ioctl }, /* ioctl */
|
||||
{ &vop_select_desc, adosfs_select }, /* select */
|
||||
{ &vop_mmap_desc, adosfs_mmap }, /* mmap */
|
||||
{ &vop_fsync_desc, adosfs_fsync }, /* fsync */
|
||||
{ &vop_seek_desc, adosfs_seek }, /* seek */
|
||||
{ &vop_remove_desc, adosfs_remove }, /* remove */
|
||||
{ &vop_link_desc, adosfs_link }, /* link */
|
||||
{ &vop_rename_desc, adosfs_rename }, /* rename */
|
||||
{ &vop_mkdir_desc, adosfs_mkdir }, /* mkdir */
|
||||
{ &vop_rmdir_desc, adosfs_rmdir }, /* rmdir */
|
||||
{ &vop_symlink_desc, adosfs_symlink }, /* symlink */
|
||||
{ &vop_readdir_desc, adosfs_readdir }, /* readdir */
|
||||
{ &vop_readlink_desc, adosfs_readlink }, /* readlink */
|
||||
{ &vop_abortop_desc, adosfs_abortop }, /* abortop */
|
||||
{ &vop_inactive_desc, adosfs_inactive }, /* inactive */
|
||||
{ &vop_reclaim_desc, adosfs_reclaim }, /* reclaim */
|
||||
{ &vop_lock_desc, adosfs_lock }, /* lock */
|
||||
{ &vop_unlock_desc, adosfs_unlock }, /* unlock */
|
||||
{ &vop_bmap_desc, adosfs_bmap }, /* bmap */
|
||||
{ &vop_strategy_desc, adosfs_strategy }, /* strategy */
|
||||
{ &vop_print_desc, adosfs_print }, /* print */
|
||||
{ &vop_islocked_desc, adosfs_islocked }, /* islocked */
|
||||
{ &vop_pathconf_desc, adosfs_pathconf }, /* pathconf */
|
||||
{ &vop_advlock_desc, adosfs_advlock }, /* advlock */
|
||||
{ &vop_blkatoff_desc, adosfs_blkatoff }, /* blkatoff */
|
||||
{ &vop_valloc_desc, adosfs_valloc }, /* valloc */
|
||||
{ &vop_vfree_desc, adosfs_vfree }, /* vfree */
|
||||
{ &vop_truncate_desc, adosfs_truncate }, /* truncate */
|
||||
{ &vop_update_desc, adosfs_update }, /* update */
|
||||
{ &vop_bwrite_desc, adosfs_bwrite }, /* bwrite */
|
||||
{ (struct vnodeop_desc*)NULL, (int(*) __P((void *)))NULL }
|
||||
};
|
||||
|
||||
struct vnodeopv_desc adosfs_vnodeop_opv_desc =
|
||||
{ &adosfs_vnodeop_p, adosfs_vnodeop_entries };
|
||||
|
||||
int
|
||||
adosfs_open(sp)
|
||||
adosfs_open(v)
|
||||
void *v;
|
||||
{
|
||||
#ifdef ADOSFS_DIAGNOSTIC
|
||||
struct vop_open_args /* {
|
||||
struct vnode *a_vp;
|
||||
int a_mode;
|
||||
struct ucred *a_cred;
|
||||
struct proc *a_p;
|
||||
} */ *sp;
|
||||
{
|
||||
#ifdef ADOSFS_DIAGNOSTIC
|
||||
} */ *sp = v;
|
||||
advopprint(sp);
|
||||
printf(" 0)");
|
||||
#endif
|
||||
|
@ -63,14 +161,15 @@ adosfs_open(sp)
|
|||
}
|
||||
|
||||
int
|
||||
adosfs_getattr(sp)
|
||||
adosfs_getattr(v)
|
||||
void *v;
|
||||
{
|
||||
struct vop_getattr_args /* {
|
||||
struct vnode *a_vp;
|
||||
struct vattr *a_vap;
|
||||
struct ucred *a_cred;
|
||||
struct proc *a_p;
|
||||
} */ *sp;
|
||||
{
|
||||
} */ *sp = v;
|
||||
struct vattr *vap;
|
||||
struct adosfsmount *amp;
|
||||
struct anode *ap;
|
||||
|
@ -127,20 +226,20 @@ adosfs_getattr(sp)
|
|||
* deleted or changed (data block pointer blocks moving about.)
|
||||
*/
|
||||
int
|
||||
adosfs_read(sp)
|
||||
adosfs_read(v)
|
||||
void *v;
|
||||
{
|
||||
struct vop_read_args /* {
|
||||
struct vnode *a_vp;
|
||||
struct uio *a_uio;
|
||||
int a_ioflag;
|
||||
struct ucred *a_cred;
|
||||
} */ *sp;
|
||||
{
|
||||
} */ *sp = v;
|
||||
struct adosfsmount *amp;
|
||||
struct anode *ap;
|
||||
struct uio *uio;
|
||||
struct buf *bp;
|
||||
struct fs *fs;
|
||||
daddr_t lbn, bn;
|
||||
daddr_t lbn;
|
||||
int size, diff, error;
|
||||
long n, on;
|
||||
|
||||
|
@ -218,15 +317,16 @@ reterr:
|
|||
}
|
||||
|
||||
int
|
||||
adosfs_write(sp)
|
||||
adosfs_write(v)
|
||||
void *v;
|
||||
{
|
||||
#ifdef ADOSFS_DIAGNOSTIC
|
||||
struct vop_write_args /* {
|
||||
struct vnode *a_vp;
|
||||
struct uio *a_uio;
|
||||
int a_ioflag;
|
||||
struct ucred *a_cred;
|
||||
} */ *sp;
|
||||
{
|
||||
#ifdef ADOSFS_DIAGNOSTIC
|
||||
} */ *sp = v;
|
||||
advopprint(sp);
|
||||
printf(" EOPNOTSUPP)");
|
||||
#endif
|
||||
|
@ -238,7 +338,10 @@ adosfs_write(sp)
|
|||
*/
|
||||
/* ARGSUSED */
|
||||
int
|
||||
adosfs_ioctl(sp)
|
||||
adosfs_ioctl(v)
|
||||
void *v;
|
||||
{
|
||||
#ifdef ADOSFS_DIAGNOSTIC
|
||||
struct vop_ioctl_args /* {
|
||||
struct vnode *a_vp;
|
||||
u_long a_command;
|
||||
|
@ -246,9 +349,7 @@ adosfs_ioctl(sp)
|
|||
int a_fflag;
|
||||
struct ucred *a_cred;
|
||||
struct proc *a_p;
|
||||
} */ *sp;
|
||||
{
|
||||
#ifdef ADOSFS_DIAGNOSTIC
|
||||
} */ *sp = v;
|
||||
advopprint(sp);
|
||||
printf(" ENOTTY)");
|
||||
#endif
|
||||
|
@ -257,19 +358,20 @@ adosfs_ioctl(sp)
|
|||
|
||||
/* ARGSUSED */
|
||||
int
|
||||
adosfs_select(sp)
|
||||
adosfs_select(v)
|
||||
void *v;
|
||||
{
|
||||
#ifdef ADOSFS_DIAGNOSTIC
|
||||
struct vop_select_args /* {
|
||||
struct vnode *a_vp;
|
||||
int a_which;
|
||||
int a_fflags;
|
||||
struct ucred *a_cred;
|
||||
struct proc *a_p;
|
||||
} */ *sp;
|
||||
{
|
||||
} */ *sp = v;
|
||||
/*
|
||||
* sure there's something to read...
|
||||
*/
|
||||
#ifdef ADOSFS_DIAGNOSTIC
|
||||
advopprint(sp);
|
||||
printf(" 1)");
|
||||
#endif
|
||||
|
@ -280,11 +382,12 @@ adosfs_select(sp)
|
|||
* Just call the device strategy routine
|
||||
*/
|
||||
int
|
||||
adosfs_strategy(sp)
|
||||
adosfs_strategy(v)
|
||||
void *v;
|
||||
{
|
||||
struct vop_strategy_args /* {
|
||||
struct buf *a_bp;
|
||||
} */ *sp;
|
||||
{
|
||||
} */ *sp = v;
|
||||
struct buf *bp;
|
||||
struct anode *ap;
|
||||
struct vnode *vp;
|
||||
|
@ -304,8 +407,8 @@ adosfs_strategy(sp)
|
|||
vp = bp->b_vp;
|
||||
ap = VTOA(vp);
|
||||
if (bp->b_blkno == bp->b_lblkno) {
|
||||
if (error =
|
||||
VOP_BMAP(vp, bp->b_lblkno, NULL, &bp->b_blkno, NULL)) {
|
||||
error = VOP_BMAP(vp, bp->b_lblkno, NULL, &bp->b_blkno, NULL);
|
||||
if (error) {
|
||||
bp->b_flags |= B_ERROR;
|
||||
biodone(bp);
|
||||
goto reterr;
|
||||
|
@ -327,13 +430,14 @@ reterr:
|
|||
}
|
||||
|
||||
int
|
||||
adosfs_link(ap)
|
||||
adosfs_link(v)
|
||||
void *v;
|
||||
{
|
||||
struct vop_link_args /* {
|
||||
struct vnode *a_dvp;
|
||||
struct vnode *a_vp;
|
||||
struct componentname *a_cnp;
|
||||
} */ *ap;
|
||||
{
|
||||
} */ *ap = v;
|
||||
|
||||
VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
|
||||
vput(ap->a_dvp);
|
||||
|
@ -341,15 +445,16 @@ adosfs_link(ap)
|
|||
}
|
||||
|
||||
int
|
||||
adosfs_symlink(ap)
|
||||
adosfs_symlink(v)
|
||||
void *v;
|
||||
{
|
||||
struct vop_symlink_args /* {
|
||||
struct vnode *a_dvp;
|
||||
struct vnode **a_vpp;
|
||||
struct componentname *a_cnp;
|
||||
struct vattr *a_vap;
|
||||
char *a_target;
|
||||
} */ *ap;
|
||||
{
|
||||
} */ *ap = v;
|
||||
|
||||
VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
|
||||
vput(ap->a_dvp);
|
||||
|
@ -357,12 +462,13 @@ adosfs_symlink(ap)
|
|||
}
|
||||
|
||||
int
|
||||
adosfs_abortop(ap)
|
||||
adosfs_abortop(v)
|
||||
void *v;
|
||||
{
|
||||
struct vop_abortop_args /* {
|
||||
struct vnode *a_dvp;
|
||||
struct componentname *a_cnp;
|
||||
} */ *ap;
|
||||
{
|
||||
} */ *ap = v;
|
||||
|
||||
if ((ap->a_cnp->cn_flags & (HASBUF | SAVESTART)) == HASBUF)
|
||||
FREE(ap->a_cnp->cn_pnbuf, M_NAMEI);
|
||||
|
@ -373,11 +479,12 @@ adosfs_abortop(ap)
|
|||
* lock the anode
|
||||
*/
|
||||
int
|
||||
adosfs_lock(sp)
|
||||
adosfs_lock(v)
|
||||
void *v;
|
||||
{
|
||||
struct vop_lock_args /* {
|
||||
struct vnode *a_vp;
|
||||
} */ *sp;
|
||||
{
|
||||
} */ *sp = v;
|
||||
struct vnode *vp;
|
||||
struct anode *ap;
|
||||
|
||||
|
@ -409,11 +516,12 @@ start:
|
|||
* unlock an anode
|
||||
*/
|
||||
int
|
||||
adosfs_unlock(sp)
|
||||
adosfs_unlock(v)
|
||||
void *v;
|
||||
{
|
||||
struct vop_unlock_args /* {
|
||||
struct vnode *a_vp;
|
||||
} */ *sp;
|
||||
{
|
||||
} */ *sp = v;
|
||||
struct anode *ap;
|
||||
|
||||
#ifdef ADOSFS_DIAGNOSTIC
|
||||
|
@ -437,15 +545,16 @@ adosfs_unlock(sp)
|
|||
* Wait until the vnode has finished changing state.
|
||||
*/
|
||||
int
|
||||
adosfs_bmap(sp)
|
||||
adosfs_bmap(v)
|
||||
void *v;
|
||||
{
|
||||
struct vop_bmap_args /* {
|
||||
struct vnode *a_vp;
|
||||
daddr_t a_bn;
|
||||
struct vnode **a_vpp;
|
||||
daddr_t *a_bnp;
|
||||
int *a_runp;
|
||||
} */ *sp;
|
||||
{
|
||||
} */ *sp = v;
|
||||
struct anode *ap;
|
||||
struct buf *flbp;
|
||||
long nb, flblk, flblkoff, fcnt;
|
||||
|
@ -510,8 +619,9 @@ adosfs_bmap(sp)
|
|||
error = EINVAL;
|
||||
goto reterr;
|
||||
}
|
||||
if (error = bread(ap->amp->devvp, nb, ap->amp->bsize,
|
||||
NOCRED, &flbp))
|
||||
error = bread(ap->amp->devvp, nb, ap->amp->bsize,
|
||||
NOCRED, &flbp);
|
||||
if (error)
|
||||
goto reterr;
|
||||
if (adoscksum(flbp, ap->nwords)) {
|
||||
#ifdef DIAGNOSTIC
|
||||
|
@ -561,11 +671,14 @@ reterr:
|
|||
*/
|
||||
/* ARGSUSED */
|
||||
int
|
||||
adosfs_print(sp)
|
||||
adosfs_print(v)
|
||||
void *v;
|
||||
{
|
||||
#if 0
|
||||
struct vop_print_args /* {
|
||||
struct vnode *a_vp;
|
||||
} */ *sp;
|
||||
{
|
||||
} */ *sp = v;
|
||||
#endif
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
@ -578,7 +691,9 @@ struct adirent {
|
|||
};
|
||||
|
||||
int
|
||||
adosfs_readdir(sp)
|
||||
adosfs_readdir(v)
|
||||
void *v;
|
||||
{
|
||||
struct vop_readdir_args /* {
|
||||
struct vnode *a_vp;
|
||||
struct uio *a_uio;
|
||||
|
@ -586,15 +701,14 @@ adosfs_readdir(sp)
|
|||
int *a_eofflag;
|
||||
u_long *a_cookies;
|
||||
int a_ncookies;
|
||||
} */ *sp;
|
||||
{
|
||||
} */ *sp = v;
|
||||
int error, useri, chainc, hashi, scanned, uavail;
|
||||
struct adirent ad, *adp;
|
||||
struct anode *pap, *ap;
|
||||
struct adosfsmount *amp;
|
||||
struct vnode *vp;
|
||||
struct uio *uio;
|
||||
u_long nextbn, resid;
|
||||
u_long nextbn;
|
||||
off_t uoff;
|
||||
|
||||
#ifdef ADOSFS_DIAGNOSTIC
|
||||
|
@ -658,7 +772,8 @@ adosfs_readdir(sp)
|
|||
*/
|
||||
ap = NULL;
|
||||
do {
|
||||
if (error = VFS_VGET(amp->mp, (ino_t)nextbn, &vp))
|
||||
error = VFS_VGET(amp->mp, (ino_t)nextbn, &vp);
|
||||
if (error)
|
||||
goto reterr;
|
||||
ap = VTOA(vp);
|
||||
scanned++;
|
||||
|
@ -714,7 +829,7 @@ adosfs_readdir(sp)
|
|||
bcopy(ap->name, adp->name, adp->namlen);
|
||||
vput(vp);
|
||||
|
||||
error = uiomove(adp, sizeof(struct adirent), uio);
|
||||
error = uiomove((caddr_t) adp, sizeof(struct adirent), uio);
|
||||
if (error)
|
||||
break;
|
||||
if (sp->a_cookies) {
|
||||
|
@ -737,14 +852,15 @@ reterr:
|
|||
|
||||
|
||||
int
|
||||
adosfs_access(sp)
|
||||
adosfs_access(v)
|
||||
void *v;
|
||||
{
|
||||
struct vop_access_args /* {
|
||||
struct vnode *a_vp;
|
||||
int a_mode;
|
||||
struct ucred *a_cred;
|
||||
struct proc *a_p;
|
||||
} */ *sp;
|
||||
{
|
||||
} */ *sp = v;
|
||||
struct anode *ap;
|
||||
int error;
|
||||
|
||||
|
@ -771,13 +887,14 @@ adosfs_access(sp)
|
|||
|
||||
/*ARGSUSED*/
|
||||
int
|
||||
adosfs_readlink(sp)
|
||||
adosfs_readlink(v)
|
||||
void *v;
|
||||
{
|
||||
struct vop_readlink_args /* {
|
||||
struct vnode *a_vp;
|
||||
struct uio *a_uio;
|
||||
struct ucred *a_cred;
|
||||
} */ *sp;
|
||||
{
|
||||
} */ *sp = v;
|
||||
struct anode *ap;
|
||||
int error;
|
||||
|
||||
|
@ -801,11 +918,12 @@ adosfs_readlink(sp)
|
|||
|
||||
/*ARGSUSED*/
|
||||
int
|
||||
adosfs_inactive(sp)
|
||||
adosfs_inactive(v)
|
||||
void *v;
|
||||
{
|
||||
struct vop_inactive_args /* {
|
||||
struct vnode *a_vp;
|
||||
} */ *sp;
|
||||
{
|
||||
} */ *sp = v;
|
||||
#ifdef ADOSFS_DIAGNOSTIC
|
||||
advopprint(sp);
|
||||
#endif
|
||||
|
@ -817,12 +935,14 @@ adosfs_inactive(sp)
|
|||
#endif
|
||||
return(0);
|
||||
}
|
||||
|
||||
int
|
||||
adosfs_islocked(sp)
|
||||
adosfs_islocked(v)
|
||||
void *v;
|
||||
{
|
||||
struct vop_islocked_args /* {
|
||||
struct vnode *a_vp;
|
||||
} */ *sp;
|
||||
{
|
||||
} */ *sp = v;
|
||||
int locked;
|
||||
|
||||
#ifdef ADOSFS_DIAGNOSTIC
|
||||
|
@ -842,11 +962,12 @@ adosfs_islocked(sp)
|
|||
* no lock needed we are being called from vclean()
|
||||
*/
|
||||
int
|
||||
adosfs_reclaim(sp)
|
||||
adosfs_reclaim(v)
|
||||
void *v;
|
||||
{
|
||||
struct vop_reclaim_args /* {
|
||||
struct vnode *a_vp;
|
||||
} */ *sp;
|
||||
{
|
||||
} */ *sp = v;
|
||||
struct vnode *vp;
|
||||
struct anode *ap;
|
||||
|
||||
|
@ -872,13 +993,15 @@ adosfs_reclaim(sp)
|
|||
* investigate exactly what each return type means as they are probably
|
||||
* not valid currently
|
||||
*/
|
||||
adosfs_pathconf(sp)
|
||||
int
|
||||
adosfs_pathconf(v)
|
||||
void *v;
|
||||
{
|
||||
struct vop_pathconf_args /* {
|
||||
struct vnode *a_vp;
|
||||
int a_name;
|
||||
register_t *a_retval;
|
||||
} */ *sp;
|
||||
{
|
||||
} */ *sp = v;
|
||||
|
||||
switch (sp->a_name) {
|
||||
case _PC_LINK_MAX:
|
||||
|
@ -926,77 +1049,3 @@ adnullop(sp)
|
|||
#endif
|
||||
return(0);
|
||||
}
|
||||
|
||||
#define adosfs_close ((int (*) __P((struct vop_close_args *)))adnullop)
|
||||
#define adosfs_fsync ((int (*) __P((struct vop_fsync_args *)))adnullop)
|
||||
#ifdef NFSSERVER
|
||||
int lease_check __P((struct vop_lease_args *));
|
||||
#define adosfs_lease_check lease_check
|
||||
#else
|
||||
#define adosfs_lease_check ((int (*) __P((struct vop_lease_args *)))adnullop)
|
||||
#endif
|
||||
#define adosfs_seek ((int (*) __P((struct vop_seek_args *)))adnullop)
|
||||
#define adosfs_vfree ((int (*) __P((struct vop_vfree_args *)))adnullop)
|
||||
|
||||
#define adosfs_advlock ((int (*) __P((struct vop_advlock_args *)))adenotsup)
|
||||
#define adosfs_blkatoff ((int (*) __P((struct vop_blkatoff_args *)))adenotsup)
|
||||
#define adosfs_bwrite ((int (*) __P((struct vop_bwrite_args *)))adenotsup)
|
||||
#define adosfs_create ((int (*) __P((struct vop_create_args *)))adenotsup)
|
||||
#define adosfs_mkdir ((int (*) __P((struct vop_mkdir_args *)))adenotsup)
|
||||
#define adosfs_mknod ((int (*) __P((struct vop_mknod_args *)))adenotsup)
|
||||
#define adosfs_mmap ((int (*) __P((struct vop_mmap_args *)))adenotsup)
|
||||
#define adosfs_remove ((int (*) __P((struct vop_remove_args *)))adenotsup)
|
||||
#define adosfs_rename ((int (*) __P((struct vop_rename_args *)))adenotsup)
|
||||
#define adosfs_rmdir ((int (*) __P((struct vop_rmdir_args *)))adenotsup)
|
||||
#define adosfs_setattr ((int (*) __P((struct vop_setattr_args *)))adenotsup)
|
||||
#define adosfs_truncate ((int (*) __P((struct vop_truncate_args *)))adenotsup)
|
||||
#define adosfs_update ((int (*) __P((struct vop_update_args *)))adenotsup)
|
||||
#define adosfs_valloc ((int (*) __P((struct vop_valloc_args *)))adenotsup)
|
||||
|
||||
struct vnodeopv_entry_desc adosfs_vnodeop_entries[] = {
|
||||
{ &vop_default_desc, vn_default_error },
|
||||
{ &vop_lookup_desc, adosfs_lookup }, /* lookup */
|
||||
{ &vop_create_desc, adosfs_create }, /* create */
|
||||
{ &vop_mknod_desc, adosfs_mknod }, /* mknod */
|
||||
{ &vop_open_desc, adosfs_open }, /* open */
|
||||
{ &vop_close_desc, adosfs_close }, /* close */
|
||||
{ &vop_access_desc, adosfs_access }, /* access */
|
||||
{ &vop_getattr_desc, adosfs_getattr }, /* getattr */
|
||||
{ &vop_setattr_desc, adosfs_setattr }, /* setattr */
|
||||
{ &vop_read_desc, adosfs_read }, /* read */
|
||||
{ &vop_write_desc, adosfs_write }, /* write */
|
||||
{ &vop_lease_desc, adosfs_lease_check }, /* lease */
|
||||
{ &vop_ioctl_desc, adosfs_ioctl }, /* ioctl */
|
||||
{ &vop_select_desc, adosfs_select }, /* select */
|
||||
{ &vop_mmap_desc, adosfs_mmap }, /* mmap */
|
||||
{ &vop_fsync_desc, adosfs_fsync }, /* fsync */
|
||||
{ &vop_seek_desc, adosfs_seek }, /* seek */
|
||||
{ &vop_remove_desc, adosfs_remove }, /* remove */
|
||||
{ &vop_link_desc, adosfs_link }, /* link */
|
||||
{ &vop_rename_desc, adosfs_rename }, /* rename */
|
||||
{ &vop_mkdir_desc, adosfs_mkdir }, /* mkdir */
|
||||
{ &vop_rmdir_desc, adosfs_rmdir }, /* rmdir */
|
||||
{ &vop_symlink_desc, adosfs_symlink }, /* symlink */
|
||||
{ &vop_readdir_desc, adosfs_readdir }, /* readdir */
|
||||
{ &vop_readlink_desc, adosfs_readlink }, /* readlink */
|
||||
{ &vop_abortop_desc, adosfs_abortop }, /* abortop */
|
||||
{ &vop_inactive_desc, adosfs_inactive }, /* inactive */
|
||||
{ &vop_reclaim_desc, adosfs_reclaim }, /* reclaim */
|
||||
{ &vop_lock_desc, adosfs_lock }, /* lock */
|
||||
{ &vop_unlock_desc, adosfs_unlock }, /* unlock */
|
||||
{ &vop_bmap_desc, adosfs_bmap }, /* bmap */
|
||||
{ &vop_strategy_desc, adosfs_strategy }, /* strategy */
|
||||
{ &vop_print_desc, adosfs_print }, /* print */
|
||||
{ &vop_islocked_desc, adosfs_islocked }, /* islocked */
|
||||
{ &vop_pathconf_desc, adosfs_pathconf }, /* pathconf */
|
||||
{ &vop_advlock_desc, adosfs_advlock }, /* advlock */
|
||||
{ &vop_blkatoff_desc, adosfs_blkatoff }, /* blkatoff */
|
||||
{ &vop_valloc_desc, adosfs_valloc }, /* valloc */
|
||||
{ &vop_vfree_desc, adosfs_vfree }, /* vfree */
|
||||
{ &vop_truncate_desc, adosfs_truncate }, /* truncate */
|
||||
{ &vop_update_desc, adosfs_update }, /* update */
|
||||
{ &vop_bwrite_desc, adosfs_bwrite }, /* bwrite */
|
||||
{ (struct vnodeop_desc*)NULL, (int(*)())NULL }
|
||||
};
|
||||
struct vnodeopv_desc adosfs_vnodeop_opv_desc =
|
||||
{ &adosfs_vnodeop_p, adosfs_vnodeop_entries };
|
||||
|
|
Loading…
Reference in New Issue