Commit 1a427ab0c1b205d1bda8da0b77ea9d295ac23c57

Authored by Dave Chinner
Committed by Dave Chinner
1 parent 1a3e8f3da0

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
... ... @@ -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 */
... ... @@ -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);
... ... @@ -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);