Print this page
XXXX adding PID information to netstat output

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/os/fio.c
          +++ new/usr/src/uts/common/os/fio.c
↓ open down ↓ 829 lines elided ↑ open up ↑
 830  830          ASSERT(ufp->uf_refcnt > 0);
 831  831          if (--ufp->uf_refcnt == 0)
 832  832                  cv_broadcast(&ufp->uf_closing_cv);
 833  833          UF_EXIT(ufp);
 834  834  }
 835  835  
 836  836  /*
 837  837   * Duplicate all file descriptors across a fork.
 838  838   */
 839  839  void
 840      -flist_fork(uf_info_t *pfip, uf_info_t *cfip)
      840 +flist_fork(proc_t *pp, proc_t *cp)
 841  841  {
 842  842          int fd, nfiles;
 843  843          uf_entry_t *pufp, *cufp;
 844  844  
      845 +        uf_info_t *pfip = P_FINFO(pp);
      846 +        uf_info_t *cfip = P_FINFO(cp);
      847 +
 845  848          mutex_init(&cfip->fi_lock, NULL, MUTEX_DEFAULT, NULL);
 846  849          cfip->fi_rlist = NULL;
 847  850  
 848  851          /*
 849  852           * We don't need to hold fi_lock because all other lwp's in the
 850  853           * parent have been held.
 851  854           */
 852  855          cfip->fi_nfiles = nfiles = flist_minsize(pfip);
 853  856  
 854  857          cfip->fi_list = kmem_zalloc(nfiles * sizeof (uf_entry_t), KM_SLEEP);
 855  858  
 856  859          for (fd = 0, pufp = pfip->fi_list, cufp = cfip->fi_list; fd < nfiles;
 857  860              fd++, pufp++, cufp++) {
 858  861                  cufp->uf_file = pufp->uf_file;
 859  862                  cufp->uf_alloc = pufp->uf_alloc;
 860  863                  cufp->uf_flag = pufp->uf_flag;
 861  864                  cufp->uf_busy = pufp->uf_busy;
      865 +
      866 +                if (cufp->uf_file != NULL && cufp->uf_file->f_vnode != NULL) {
      867 +                        VOP_IOCTL(cufp->uf_file->f_vnode, F_FORKED,
      868 +                                (intptr_t)cp,
      869 +                                FKIOCTL,
      870 +                                kcred, NULL, NULL);
      871 +                }
      872 +
 862  873                  if (pufp->uf_file == NULL) {
 863  874                          ASSERT(pufp->uf_flag == 0);
 864  875                          if (pufp->uf_busy) {
 865  876                                  /*
 866  877                                   * Grab locks to appease ASSERTs in fd_reserve
 867  878                                   */
 868  879                                  mutex_enter(&cfip->fi_lock);
 869  880                                  mutex_enter(&cufp->uf_lock);
 870  881                                  fd_reserve(cfip, fd, -1);
 871  882                                  mutex_exit(&cufp->uf_lock);
↓ open down ↓ 65 lines elided ↑ open up ↑
 937  948  
 938  949          mutex_enter(&fp->f_tlock);
 939  950  
 940  951          ASSERT(fp->f_count > 0);
 941  952  
 942  953          count = fp->f_count--;
 943  954          flag = fp->f_flag;
 944  955          offset = fp->f_offset;
 945  956  
 946  957          vp = fp->f_vnode;
      958 +        if (vp != NULL)
      959 +                VOP_IOCTL(vp, F_CLOSED, (intptr_t)ttoproc(curthread),
      960 +                        FKIOCTL, kcred, NULL, NULL);
 947  961  
 948  962          error = VOP_CLOSE(vp, flag, count, offset, fp->f_cred, NULL);
 949  963  
 950  964          if (count > 1) {
 951  965                  mutex_exit(&fp->f_tlock);
 952  966                  return (error);
 953  967          }
 954  968          ASSERT(fp->f_count == 0);
 955  969          mutex_exit(&fp->f_tlock);
 956  970  
↓ open down ↓ 868 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX