Print this page
7378 exported_lock held during nfs4 compound processing


 596 #define rdonly4(req, cs)  \
 597         (vn_is_readonly((cs)->vp) || \
 598             (nfsauth4_access((cs)->exi, (cs)->vp, (req), (cs)->basecr, NULL, \
 599             NULL, NULL, NULL) & (NFSAUTH_RO | NFSAUTH_LIMITED)))
 600 
 601 extern int      nfsauth4_access(struct exportinfo *, vnode_t *,
 602     struct svc_req *, cred_t *, uid_t *, gid_t *, uint_t *, gid_t **);
 603 extern int      nfsauth4_secinfo_access(struct exportinfo *,
 604     struct svc_req *, int, int, cred_t *);
 605 extern int      nfsauth_cache_clnt_compar(const void *, const void *);
 606 extern int      nfs_fhbcmp(char *, char *, int);
 607 extern int      nfs_exportinit(void);
 608 extern void     nfs_exportfini(void);
 609 extern int      chk_clnt_sec(struct exportinfo *, struct svc_req *);
 610 extern int      makefh(fhandle_t *, struct vnode *, struct exportinfo *);
 611 extern int      makefh_ol(fhandle_t *, struct exportinfo *, uint_t);
 612 extern int      makefh3(nfs_fh3 *, struct vnode *, struct exportinfo *);
 613 extern int      makefh3_ol(nfs_fh3 *, struct exportinfo *, uint_t);
 614 extern vnode_t *nfs_fhtovp(fhandle_t *, struct exportinfo *);
 615 extern vnode_t *nfs3_fhtovp(nfs_fh3 *, struct exportinfo *);
 616 extern struct   exportinfo *checkexport(fsid_t *, struct fid *);
 617 extern struct   exportinfo *checkexport4(fsid_t *, struct fid *, vnode_t *);

 618 extern void     exi_hold(struct exportinfo *);
 619 extern void     exi_rele(struct exportinfo *);
 620 extern struct exportinfo *nfs_vptoexi(vnode_t *, vnode_t *, cred_t *, int *,
 621     int *, bool_t);
 622 extern int      nfs_check_vpexi(vnode_t *, vnode_t *, cred_t *,
 623                         struct exportinfo **);
 624 extern void     export_link(struct exportinfo *);
 625 extern void     export_unlink(struct exportinfo *);
 626 extern vnode_t *untraverse(vnode_t *);
 627 extern int      vn_is_nfs_reparse(vnode_t *, cred_t *);
 628 extern int      client_is_downrev(struct svc_req *);
 629 extern char    *build_symlink(vnode_t *, cred_t *, size_t *);
 630 
 631 /*
 632  * Functions that handle the NFSv4 server namespace
 633  */
 634 extern exportinfo_t *vis2exi(treenode_t *);
 635 extern int      treeclimb_export(struct exportinfo *);
 636 extern void     treeclimb_unexport(struct exportinfo *);
 637 extern int      nfs_visible(struct exportinfo *, vnode_t *, int *);




 596 #define rdonly4(req, cs)  \
 597         (vn_is_readonly((cs)->vp) || \
 598             (nfsauth4_access((cs)->exi, (cs)->vp, (req), (cs)->basecr, NULL, \
 599             NULL, NULL, NULL) & (NFSAUTH_RO | NFSAUTH_LIMITED)))
 600 
 601 extern int      nfsauth4_access(struct exportinfo *, vnode_t *,
 602     struct svc_req *, cred_t *, uid_t *, gid_t *, uint_t *, gid_t **);
 603 extern int      nfsauth4_secinfo_access(struct exportinfo *,
 604     struct svc_req *, int, int, cred_t *);
 605 extern int      nfsauth_cache_clnt_compar(const void *, const void *);
 606 extern int      nfs_fhbcmp(char *, char *, int);
 607 extern int      nfs_exportinit(void);
 608 extern void     nfs_exportfini(void);
 609 extern int      chk_clnt_sec(struct exportinfo *, struct svc_req *);
 610 extern int      makefh(fhandle_t *, struct vnode *, struct exportinfo *);
 611 extern int      makefh_ol(fhandle_t *, struct exportinfo *, uint_t);
 612 extern int      makefh3(nfs_fh3 *, struct vnode *, struct exportinfo *);
 613 extern int      makefh3_ol(nfs_fh3 *, struct exportinfo *, uint_t);
 614 extern vnode_t *nfs_fhtovp(fhandle_t *, struct exportinfo *);
 615 extern vnode_t *nfs3_fhtovp(nfs_fh3 *, struct exportinfo *);
 616 extern struct   exportinfo *checkexport(fsid_t *, struct fid *, vnode_t *);
 617 extern struct   exportinfo *checkexport_nohold(fsid_t *, struct fid *,
 618     vnode_t *);
 619 extern void     exi_hold(struct exportinfo *);
 620 extern void     exi_rele(struct exportinfo *);
 621 extern struct exportinfo *nfs_vptoexi(vnode_t *, vnode_t *, cred_t *, int *,
 622     int *, bool_t);
 623 extern int      nfs_check_vpexi(vnode_t *, vnode_t *, cred_t *,
 624                         struct exportinfo **);
 625 extern void     export_link(struct exportinfo *);
 626 extern void     export_unlink(struct exportinfo *);
 627 extern vnode_t *untraverse(vnode_t *);
 628 extern int      vn_is_nfs_reparse(vnode_t *, cred_t *);
 629 extern int      client_is_downrev(struct svc_req *);
 630 extern char    *build_symlink(vnode_t *, cred_t *, size_t *);
 631 
 632 /*
 633  * Functions that handle the NFSv4 server namespace
 634  */
 635 extern exportinfo_t *vis2exi(treenode_t *);
 636 extern int      treeclimb_export(struct exportinfo *);
 637 extern void     treeclimb_unexport(struct exportinfo *);
 638 extern int      nfs_visible(struct exportinfo *, vnode_t *, int *);