denode
struct denode *de_next; /* Hash chain forward */
#define VTODE(vp) ((struct denode *)(vp)->v_data)
int deget(struct msdosfsmount *, u_long, u_long, struct denode **);
int uniqdosname(struct denode *, struct componentname *, u_char *);
int readde(struct denode *dep, struct buf **bpp, struct direntry **epp);
int deextend(struct denode *dep, u_long length);
void msdosfs_reinsert(struct denode *ip, u_long new_dirclust,
int dosdirempty(struct denode *dep);
int createde(struct denode *dep, struct denode *ddep, struct denode **depp,
int deupdat(struct denode *dep, int waitfor);
int removede(struct denode *pdep, struct denode *dep);
int detrunc(struct denode *dep, u_long length, int flags);
int doscheckpath( struct denode *source, struct denode *target);
int pcbmap(struct denode *dep, u_long findcn, daddr_t *bnp, u_long *cnp,
int extendfile(struct denode *dep, u_long count, struct buf **bpp, u_long *ncp,
void fc_purge(struct denode *dep, u_int frcn);
static struct denode *
struct denode *dep;
msdosfs_hashins(struct denode *dep)
struct denode **depp, *deq;
msdosfs_hashrem(struct denode *dep)
struct denode **depp, *deq;
msdosfs_reinsert(struct denode *ip, u_long new_dirclust, u_long new_diroffset)
struct denode **depp)
struct denode *ldep;
ldep = kmalloc(sizeof(struct denode), M_MSDOSFSNODE, M_WAITOK | M_ZERO);
deupdat(struct denode *dep, int waitfor)
detrunc(struct denode *dep, u_long length, int flags)
deextend(struct denode *dep, u_long length)
struct denode *dep = VTODE(vp);
struct denode *dep = VTODE(vp);
static struct denode **dehashtbl;
pcbmap(struct denode *dep, u_long findcn, daddr_t *bnp, u_long *cnp, int *sp)
fc_lookup(struct denode *dep, u_long findcn, u_long *frcnp, u_long *fsrcnp)
fc_purge(struct denode *dep, u_int frcn)
static void fc_lookup(struct denode *dep, u_long findcn, u_long *frcnp,
extendfile(struct denode *dep, u_long count, struct buf **bpp, u_long *ncp,
struct denode *dp;
struct denode *tdp;
createde(struct denode *dep, struct denode *ddep, struct denode **depp,
struct denode *tdp, struct vnode **vpp)
dosdirempty(struct denode *dep)
doscheckpath(struct denode *source, struct denode *target)
struct denode *dep;
readde(struct denode *dep, struct buf **bpp, struct direntry **epp)
removede(struct denode *pdep, struct denode *dep)
uniqdosname(struct denode *dep, struct componentname *cnp, u_char *cp)
struct denode *ndep;
struct denode *dep;
struct denode *dep;
struct denode *dep;
struct denode ndirent;
struct denode *dep;
struct denode *pdep = VTODE(ap->a_dvp);
struct denode *dep;
struct denode *pdep = VTODE(ap->a_dvp);
struct denode ndirent;
struct denode *ip, *dp;
struct denode *dep;
struct denode *dep;
struct denode *dep = VTODE(vp);
struct denode *dep = VTODE(vp);
struct denode *dep = VTODE(ap->a_vp);
struct denode *dep = VTODE(ap->a_vp);
struct denode *dep = VTODE(ap->a_vp);
struct denode *dep = VTODE(vp);
struct denode *dep = VTODE(vp);
struct denode *dep = VTODE(vp);
struct denode *dep = VTODE(ap->a_vp);
struct denode *ddep = VTODE(ap->a_dvp);
struct denode *ip, *xp, *dp, *zp;
(void *)denode.de_pmp, Pid);
fsp->fsid = fsp->rdev = fstat_dev2udev(denode.de_dev);
fsp->mode |= denode.de_Attributes & ATTR_READONLY ? 0 : 0222;
fsp->mode |= denode.de_Attributes & ATTR_DIRECTORY ? S_IFDIR : S_IFREG;
fsp->size = denode.de_FileSize;
if (denode.de_Attributes & ATTR_DIRECTORY) {
fileid = cntobn(&mnt->data, denode.de_StartCluster)
if (denode.de_StartCluster == MSDOSFSROOT)
fileid = cntobn(&mnt->data, denode.de_dirclust) * dirsperblk;
if (denode.de_dirclust == MSDOSFSROOT)
fileid += denode.de_diroffset / sizeof(struct direntry);
#define VTODE(vp) ((struct denode *)(vp)->v_data)
struct denode denode;
if (!kread(VTODE(vp), &denode, sizeof (denode))) {
if (mnt->kptr == denode.de_pmp)
mnt->kptr = denode.de_pmp;
if (!kread(denode.de_pmp, &mnt->data, sizeof mnt->data)) {
msdos_populate_dir(const char *path, struct denode *dir, fsnode *root,
struct denode *de;
static int msdos_populate_dir(const char *, struct denode *, fsnode *,
struct denode;
struct denode *msdosfs_mkfile(const char *, struct denode *, fsnode *);
struct denode *msdosfs_mkdire(const char *, struct denode *, fsnode *);
int m_readde(struct denode *dep, struct m_buf **bpp, struct direntry **epp);
int m_extendfile(struct denode *dep, u_long count, struct m_buf **bpp,
detrunc(struct denode *dep, u_long length, int flags)
deextend(struct denode *dep, u_long length)
struct denode **depp)
struct denode *ldep;
pcbmap(struct denode *dep, u_long findcn, daddr_t *bnp, u_long *cnp, int *sp)
fc_lookup(struct denode *dep, u_long findcn, u_long *frcnp, u_long *fsrcnp)
fc_purge(struct denode *dep, u_int frcn)
static void fc_lookup(struct denode *dep, u_long findcn, u_long *frcnp,
m_extendfile(struct denode *dep, u_long count, struct m_buf **bpp, u_long *ncp,
m_readde(struct denode *dep, struct m_buf **bpp, struct direntry **epp)
uniqdosname(struct denode *dep, struct componentname *cnp, u_char *cp)
createde(struct denode *dep, struct denode *ddep, struct denode **depp,
struct denode *ndep;
msdosfs_findslot(struct denode *dp, struct componentname *cnp)
struct denode *
msdosfs_mkfile(const char *path, struct denode *pdep, fsnode *node)
struct denode ndirent;
struct denode *dep;
msdosfs_updatede(struct denode *dep)
msdosfs_wfile(const char *path, struct denode *dep, fsnode *node)
struct denode *
msdosfs_mkdire(const char *path __unused, struct denode *pdep, fsnode *node)
struct denode ndirent;
struct denode *dep;
static int msdosfs_wfile(const char *, struct denode *, fsnode *);
msdosfs_times(struct denode *dep, const struct stat *st)