Print this page
nfssrv: nfsstat reports zeroed data in zone


 653 
 654         /*
 655          * XNFS and RFC1094 require us to return ENXIO if argument
 656          * is not a link. BUGID 1138002.
 657          */
 658         if (vp->v_type != VLNK && !is_referral) {
 659                 VN_RELE(vp);
 660                 rl->rl_data = NULL;
 661                 rl->rl_status = NFSERR_NXIO;
 662                 return;
 663         }
 664 
 665         /*
 666          * Allocate data for pathname.  This will be freed by rfs_rlfree.
 667          */
 668         rl->rl_data = kmem_alloc(NFS_MAXPATHLEN, KM_SLEEP);
 669 
 670         if (is_referral) {
 671                 char *s;
 672                 size_t strsz;


 673 
 674                 /* Get an artificial symlink based on a referral */
 675                 s = build_symlink(vp, cr, &strsz);
 676                 global_svstat_ptr[2][NFS_REFERLINKS].value.ui64++;
 677                 DTRACE_PROBE2(nfs2serv__func__referral__reflink,
 678                     vnode_t *, vp, char *, s);
 679                 if (s == NULL)
 680                         error = EINVAL;
 681                 else {
 682                         error = 0;
 683                         (void) strlcpy(rl->rl_data, s, NFS_MAXPATHLEN);
 684                         rl->rl_count = (uint32_t)MIN(strsz, NFS_MAXPATHLEN);
 685                         kmem_free(s, strsz);
 686                 }
 687 
 688         } else {
 689 
 690                 /*
 691                  * Set up io vector to read sym link data
 692                  */
 693                 iov.iov_base = rl->rl_data;
 694                 iov.iov_len = NFS_MAXPATHLEN;
 695                 uio.uio_iov = &iov;
 696                 uio.uio_iovcnt = 1;




 653 
 654         /*
 655          * XNFS and RFC1094 require us to return ENXIO if argument
 656          * is not a link. BUGID 1138002.
 657          */
 658         if (vp->v_type != VLNK && !is_referral) {
 659                 VN_RELE(vp);
 660                 rl->rl_data = NULL;
 661                 rl->rl_status = NFSERR_NXIO;
 662                 return;
 663         }
 664 
 665         /*
 666          * Allocate data for pathname.  This will be freed by rfs_rlfree.
 667          */
 668         rl->rl_data = kmem_alloc(NFS_MAXPATHLEN, KM_SLEEP);
 669 
 670         if (is_referral) {
 671                 char *s;
 672                 size_t strsz;
 673                 kstat_named_t *stat =
 674                     exi->exi_ne->ne_globals->svstat[NFS_VERSION];
 675 
 676                 /* Get an artificial symlink based on a referral */
 677                 s = build_symlink(vp, cr, &strsz);
 678                 stat[NFS_REFERLINKS].value.ui64++;
 679                 DTRACE_PROBE2(nfs2serv__func__referral__reflink,
 680                     vnode_t *, vp, char *, s);
 681                 if (s == NULL)
 682                         error = EINVAL;
 683                 else {
 684                         error = 0;
 685                         (void) strlcpy(rl->rl_data, s, NFS_MAXPATHLEN);
 686                         rl->rl_count = (uint32_t)MIN(strsz, NFS_MAXPATHLEN);
 687                         kmem_free(s, strsz);
 688                 }
 689 
 690         } else {
 691 
 692                 /*
 693                  * Set up io vector to read sym link data
 694                  */
 695                 iov.iov_base = rl->rl_data;
 696                 iov.iov_len = NFS_MAXPATHLEN;
 697                 uio.uio_iov = &iov;
 698                 uio.uio_iovcnt = 1;