Print this page
5045 use atomic_{inc,dec}_* instead of atomic_add_*

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/nfs/nfs3_vnops.c
          +++ new/usr/src/uts/common/fs/nfs/nfs3_vnops.c
↓ open down ↓ 5268 lines elided ↑ open up ↑
5269 5269           * and we can prevent the deadlock that would have occurred
5270 5270           * when nfs3_addmap() would have acquired it out of order.
5271 5271           *
5272 5272           * Since we are not protecting r_inmap by any lock, we do not
5273 5273           * hold any lock when we decrement it. We atomically decrement
5274 5274           * r_inmap after we release r_lkserlock.
5275 5275           */
5276 5276  
5277 5277          if (nfs_rw_enter_sig(&rp->r_rwlock, RW_WRITER, INTR(vp)))
5278 5278                  return (EINTR);
5279      -        atomic_add_int(&rp->r_inmap, 1);
     5279 +        atomic_inc_uint(&rp->r_inmap);
5280 5280          nfs_rw_exit(&rp->r_rwlock);
5281 5281  
5282 5282          if (nfs_rw_enter_sig(&rp->r_lkserlock, RW_READER, INTR(vp))) {
5283      -                atomic_add_int(&rp->r_inmap, -1);
     5283 +                atomic_dec_uint(&rp->r_inmap);
5284 5284                  return (EINTR);
5285 5285          }
5286 5286  
5287 5287          if (vp->v_flag & VNOCACHE) {
5288 5288                  error = EAGAIN;
5289 5289                  goto done;
5290 5290          }
5291 5291  
5292 5292          /*
5293 5293           * Don't allow concurrent locks and mapping if mandatory locking is
↓ open down ↓ 21 lines elided ↑ open up ↑
5315 5315          vn_a.cred = cr;
5316 5316          vn_a.amp = NULL;
5317 5317          vn_a.szc = 0;
5318 5318          vn_a.lgrp_mem_policy_flags = 0;
5319 5319  
5320 5320          error = as_map(as, *addrp, len, segvn_create, &vn_a);
5321 5321          as_rangeunlock(as);
5322 5322  
5323 5323  done:
5324 5324          nfs_rw_exit(&rp->r_lkserlock);
5325      -        atomic_add_int(&rp->r_inmap, -1);
     5325 +        atomic_dec_uint(&rp->r_inmap);
5326 5326          return (error);
5327 5327  }
5328 5328  
5329 5329  /* ARGSUSED */
5330 5330  static int
5331 5331  nfs3_addmap(vnode_t *vp, offset_t off, struct as *as, caddr_t addr,
5332 5332          size_t len, uchar_t prot, uchar_t maxprot, uint_t flags,
5333 5333          cred_t *cr, caller_context_t *ct)
5334 5334  {
5335 5335          rnode_t *rp;
↓ open down ↓ 1419 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX