- un->un_uppervp = uppervp;
- if ((lowervp == 0) && un->un_lowervp)
- vrele(un->un_lowervp);
- un->un_lowervp = lowervp;
- *vpp = un->un_vnode;
+ if (UNIONTOV(un) != undvp)
+ VOP_LOCK(UNIONTOV(un));
+ if (uppervp != un->un_uppervp) {
+ if (un->un_uppervp)
+ vrele(un->un_uppervp);
+ un->un_uppervp = uppervp;
+ }
+ if (lowervp != un->un_lowervp) {
+ if (un->un_lowervp)
+ vrele(un->un_lowervp);
+ un->un_lowervp = lowervp;
+ }
+ *vpp = UNIONTOV(un);