Commit 1a427ab0c1b205d1bda8da0b77ea9d295ac23c57
Committed by
Dave Chinner
1 parent
1a3e8f3da0
Exists in
master
and in
4 other branches
xfs: convert pag_ici_lock to a spin lock
now that we are using RCU protection for the inode cache lookups, the lock is only needed on the modification side. Hence it is not necessary for the lock to be a rwlock as there are no read side holders anymore. Convert it to a spin lock to reflect it's exclusive nature. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Alex Elder <aelder@sgi.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
Showing 4 changed files with 11 additions and 11 deletions Side-by-side Diff
fs/xfs/linux-2.6/xfs_sync.c
... | ... | @@ -620,12 +620,12 @@ |
620 | 620 | struct xfs_perag *pag; |
621 | 621 | |
622 | 622 | pag = xfs_perag_get(mp, XFS_INO_TO_AGNO(mp, ip->i_ino)); |
623 | - write_lock(&pag->pag_ici_lock); | |
623 | + spin_lock(&pag->pag_ici_lock); | |
624 | 624 | spin_lock(&ip->i_flags_lock); |
625 | 625 | __xfs_inode_set_reclaim_tag(pag, ip); |
626 | 626 | __xfs_iflags_set(ip, XFS_IRECLAIMABLE); |
627 | 627 | spin_unlock(&ip->i_flags_lock); |
628 | - write_unlock(&pag->pag_ici_lock); | |
628 | + spin_unlock(&pag->pag_ici_lock); | |
629 | 629 | xfs_perag_put(pag); |
630 | 630 | } |
631 | 631 | |
632 | 632 | |
... | ... | @@ -833,12 +833,12 @@ |
833 | 833 | * added to the tree assert that it's been there before to catch |
834 | 834 | * problems with the inode life time early on. |
835 | 835 | */ |
836 | - write_lock(&pag->pag_ici_lock); | |
836 | + spin_lock(&pag->pag_ici_lock); | |
837 | 837 | if (!radix_tree_delete(&pag->pag_ici_root, |
838 | 838 | XFS_INO_TO_AGINO(ip->i_mount, ip->i_ino))) |
839 | 839 | ASSERT(0); |
840 | 840 | __xfs_inode_clear_reclaim(pag, ip); |
841 | - write_unlock(&pag->pag_ici_lock); | |
841 | + spin_unlock(&pag->pag_ici_lock); | |
842 | 842 | |
843 | 843 | /* |
844 | 844 | * Here we do an (almost) spurious inode lock in order to coordinate |
fs/xfs/xfs_ag.h
... | ... | @@ -227,7 +227,7 @@ |
227 | 227 | |
228 | 228 | atomic_t pagf_fstrms; /* # of filestreams active in this AG */ |
229 | 229 | |
230 | - rwlock_t pag_ici_lock; /* incore inode lock */ | |
230 | + spinlock_t pag_ici_lock; /* incore inode cache lock */ | |
231 | 231 | struct radix_tree_root pag_ici_root; /* incore inode cache root */ |
232 | 232 | int pag_ici_reclaimable; /* reclaimable inodes */ |
233 | 233 | struct mutex pag_ici_reclaim_lock; /* serialisation point */ |
fs/xfs/xfs_iget.c
... | ... | @@ -260,7 +260,7 @@ |
260 | 260 | goto out_error; |
261 | 261 | } |
262 | 262 | |
263 | - write_lock(&pag->pag_ici_lock); | |
263 | + spin_lock(&pag->pag_ici_lock); | |
264 | 264 | spin_lock(&ip->i_flags_lock); |
265 | 265 | ip->i_flags &= ~(XFS_IRECLAIMABLE | XFS_IRECLAIM); |
266 | 266 | ip->i_flags |= XFS_INEW; |
... | ... | @@ -273,7 +273,7 @@ |
273 | 273 | &xfs_iolock_active, "xfs_iolock_active"); |
274 | 274 | |
275 | 275 | spin_unlock(&ip->i_flags_lock); |
276 | - write_unlock(&pag->pag_ici_lock); | |
276 | + spin_unlock(&pag->pag_ici_lock); | |
277 | 277 | } else { |
278 | 278 | /* If the VFS inode is being torn down, pause and try again. */ |
279 | 279 | if (!igrab(inode)) { |
... | ... | @@ -351,7 +351,7 @@ |
351 | 351 | BUG(); |
352 | 352 | } |
353 | 353 | |
354 | - write_lock(&pag->pag_ici_lock); | |
354 | + spin_lock(&pag->pag_ici_lock); | |
355 | 355 | |
356 | 356 | /* insert the new inode */ |
357 | 357 | error = radix_tree_insert(&pag->pag_ici_root, agino, ip); |
358 | 358 | |
... | ... | @@ -366,14 +366,14 @@ |
366 | 366 | ip->i_udquot = ip->i_gdquot = NULL; |
367 | 367 | xfs_iflags_set(ip, XFS_INEW); |
368 | 368 | |
369 | - write_unlock(&pag->pag_ici_lock); | |
369 | + spin_unlock(&pag->pag_ici_lock); | |
370 | 370 | radix_tree_preload_end(); |
371 | 371 | |
372 | 372 | *ipp = ip; |
373 | 373 | return 0; |
374 | 374 | |
375 | 375 | out_preload_end: |
376 | - write_unlock(&pag->pag_ici_lock); | |
376 | + spin_unlock(&pag->pag_ici_lock); | |
377 | 377 | radix_tree_preload_end(); |
378 | 378 | if (lock_flags) |
379 | 379 | xfs_iunlock(ip, lock_flags); |
fs/xfs/xfs_mount.c
... | ... | @@ -472,7 +472,7 @@ |
472 | 472 | goto out_unwind; |
473 | 473 | pag->pag_agno = index; |
474 | 474 | pag->pag_mount = mp; |
475 | - rwlock_init(&pag->pag_ici_lock); | |
475 | + spin_lock_init(&pag->pag_ici_lock); | |
476 | 476 | mutex_init(&pag->pag_ici_reclaim_lock); |
477 | 477 | INIT_RADIX_TREE(&pag->pag_ici_root, GFP_ATOMIC); |
478 | 478 | spin_lock_init(&pag->pag_buf_lock); |