int smb_dev2share(int fd, int mode, struct smb_cred *scred, struct smb_share **sspp) { struct file *fp; struct vnode *vp; struct smb_dev *sdp; struct smb_share *ssp; dev_t dev; int error; fp = nsmb_getfp(scred->scr_p->p_fd, fd, FREAD | FWRITE); if (fp == NULL) return EBADF; vp = (struct vnode*)fp->f_data; if (vp == NULL) return EBADF; dev = vp->v_rdev; if (dev == NODEV) return EBADF; SMB_CHECKMINOR(dev); ssp = sdp->sd_share; if (ssp == NULL) return ENOTCONN; error = smb_share_get(ssp, LK_EXCLUSIVE, scred); if (error) return error; *sspp = ssp; return 0; }
int smb_dev2share(int fd, int mode, struct smb_cred *scred, struct smb_share **sspp) { struct file *fp; struct vnode *vp; struct smb_dev *sdp; struct smb_share *ssp; struct cdev *dev; int error; fp = nsmb_getfp(scred->scr_td->td_proc->p_fd, fd, FREAD | FWRITE); if (fp == NULL) return EBADF; vp = fp->f_vnode; if (vp == NULL) { fdrop(fp, curthread); return EBADF; } if (vp->v_type != VCHR) { fdrop(fp, curthread); return EBADF; } dev = vp->v_rdev; SMB_CHECKMINOR(dev); ssp = sdp->sd_share; if (ssp == NULL) { fdrop(fp, curthread); return ENOTCONN; } error = smb_share_get(ssp, LK_EXCLUSIVE, scred); if (error == 0) *sspp = ssp; fdrop(fp, curthread); return error; }