Print this page
7378 exported_lock held during nfs4 compound processing


 622 
 623         vp = exip->exi_vp;
 624         VN_HOLD(vp);
 625         exportdir = 1;
 626 
 627         for (;;) {
 628 
 629                 bzero(&fid, sizeof (fid));
 630                 fid.fid_len = MAXFIDSZ;
 631                 error = vop_fid_pseudo(vp, &fid);
 632                 if (error)
 633                         break;
 634 
 635                 if (! exportdir) {
 636                         /*
 637                          * Check if this exportroot is a VROOT dir.  If so,
 638                          * then attach the pseudonodes.  If not, then
 639                          * continue .. traversal until we hit a VROOT
 640                          * export (pseudo or real).
 641                          */
 642                         exi = checkexport4(&vp->v_vfsp->vfs_fsid, &fid, vp);

 643                         if (exi != NULL && vp->v_flag & VROOT) {
 644                                 /*
 645                                  * Found an export info
 646                                  *
 647                                  * Extend the list of visible
 648                                  * directories whether it's a pseudo
 649                                  * or a real export.
 650                                  */
 651                                 more_visible(exi, tree_head);
 652                                 break;  /* and climb no further */
 653                         }
 654                 }
 655 
 656                 /*
 657                  * If at the root of the filesystem, need
 658                  * to traverse across the mountpoint
 659                  * and continue the climb on the mounted-on
 660                  * filesystem.
 661                  */
 662                 if (vp->v_flag & VROOT) {




 622 
 623         vp = exip->exi_vp;
 624         VN_HOLD(vp);
 625         exportdir = 1;
 626 
 627         for (;;) {
 628 
 629                 bzero(&fid, sizeof (fid));
 630                 fid.fid_len = MAXFIDSZ;
 631                 error = vop_fid_pseudo(vp, &fid);
 632                 if (error)
 633                         break;
 634 
 635                 if (! exportdir) {
 636                         /*
 637                          * Check if this exportroot is a VROOT dir.  If so,
 638                          * then attach the pseudonodes.  If not, then
 639                          * continue .. traversal until we hit a VROOT
 640                          * export (pseudo or real).
 641                          */
 642                         exi = checkexport_nohold(&vp->v_vfsp->vfs_fsid, &fid,
 643                             vp);
 644                         if (exi != NULL && vp->v_flag & VROOT) {
 645                                 /*
 646                                  * Found an export info
 647                                  *
 648                                  * Extend the list of visible
 649                                  * directories whether it's a pseudo
 650                                  * or a real export.
 651                                  */
 652                                 more_visible(exi, tree_head);
 653                                 break;  /* and climb no further */
 654                         }
 655                 }
 656 
 657                 /*
 658                  * If at the root of the filesystem, need
 659                  * to traverse across the mountpoint
 660                  * and continue the climb on the mounted-on
 661                  * filesystem.
 662                  */
 663                 if (vp->v_flag & VROOT) {