diff options
| -rw-r--r-- | fs/xfs/xfs_inode.c | 28 | ||||
| -rw-r--r-- | fs/xfs/xfs_inode.h | 2 | ||||
| -rw-r--r-- | fs/xfs/xfs_inode_item.c | 18 |
3 files changed, 11 insertions, 37 deletions
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 16c3968c1bbe..0ffd56447045 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c | |||
| @@ -2439,34 +2439,6 @@ xfs_idestroy_fork( | |||
| 2439 | } | 2439 | } |
| 2440 | 2440 | ||
| 2441 | /* | 2441 | /* |
| 2442 | * Increment the pin count of the given buffer. | ||
| 2443 | * This value is protected by ipinlock spinlock in the mount structure. | ||
| 2444 | */ | ||
| 2445 | void | ||
| 2446 | xfs_ipin( | ||
| 2447 | xfs_inode_t *ip) | ||
| 2448 | { | ||
| 2449 | ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); | ||
| 2450 | |||
| 2451 | atomic_inc(&ip->i_pincount); | ||
| 2452 | } | ||
| 2453 | |||
| 2454 | /* | ||
| 2455 | * Decrement the pin count of the given inode, and wake up | ||
| 2456 | * anyone in xfs_iwait_unpin() if the count goes to 0. The | ||
| 2457 | * inode must have been previously pinned with a call to xfs_ipin(). | ||
| 2458 | */ | ||
| 2459 | void | ||
| 2460 | xfs_iunpin( | ||
| 2461 | xfs_inode_t *ip) | ||
| 2462 | { | ||
| 2463 | ASSERT(atomic_read(&ip->i_pincount) > 0); | ||
| 2464 | |||
| 2465 | if (atomic_dec_and_test(&ip->i_pincount)) | ||
| 2466 | wake_up(&ip->i_ipin_wait); | ||
| 2467 | } | ||
| 2468 | |||
| 2469 | /* | ||
| 2470 | * This is called to unpin an inode. The caller must have the inode locked | 2442 | * This is called to unpin an inode. The caller must have the inode locked |
| 2471 | * in at least shared mode so that the buffer cannot be subsequently pinned | 2443 | * in at least shared mode so that the buffer cannot be subsequently pinned |
| 2472 | * once someone is waiting for it to be unpinned. | 2444 | * once someone is waiting for it to be unpinned. |
diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index 41e8a4e2e3be..9965e40a4615 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h | |||
| @@ -471,8 +471,6 @@ int xfs_itruncate_finish(struct xfs_trans **, xfs_inode_t *, | |||
| 471 | int xfs_iunlink(struct xfs_trans *, xfs_inode_t *); | 471 | int xfs_iunlink(struct xfs_trans *, xfs_inode_t *); |
| 472 | 472 | ||
| 473 | void xfs_iext_realloc(xfs_inode_t *, int, int); | 473 | void xfs_iext_realloc(xfs_inode_t *, int, int); |
| 474 | void xfs_ipin(xfs_inode_t *); | ||
| 475 | void xfs_iunpin(xfs_inode_t *); | ||
| 476 | void xfs_iunpin_wait(xfs_inode_t *); | 474 | void xfs_iunpin_wait(xfs_inode_t *); |
| 477 | int xfs_iflush(xfs_inode_t *, uint); | 475 | int xfs_iflush(xfs_inode_t *, uint); |
| 478 | void xfs_ichgtime(xfs_inode_t *, int); | 476 | void xfs_ichgtime(xfs_inode_t *, int); |
diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c index d4dc063111f8..7bfea8540159 100644 --- a/fs/xfs/xfs_inode_item.c +++ b/fs/xfs/xfs_inode_item.c | |||
| @@ -535,23 +535,23 @@ xfs_inode_item_format( | |||
| 535 | 535 | ||
| 536 | /* | 536 | /* |
| 537 | * This is called to pin the inode associated with the inode log | 537 | * This is called to pin the inode associated with the inode log |
| 538 | * item in memory so it cannot be written out. Do this by calling | 538 | * item in memory so it cannot be written out. |
| 539 | * xfs_ipin() to bump the pin count in the inode while holding the | ||
| 540 | * inode pin lock. | ||
| 541 | */ | 539 | */ |
| 542 | STATIC void | 540 | STATIC void |
| 543 | xfs_inode_item_pin( | 541 | xfs_inode_item_pin( |
| 544 | xfs_inode_log_item_t *iip) | 542 | xfs_inode_log_item_t *iip) |
| 545 | { | 543 | { |
| 546 | ASSERT(xfs_isilocked(iip->ili_inode, XFS_ILOCK_EXCL)); | 544 | ASSERT(xfs_isilocked(iip->ili_inode, XFS_ILOCK_EXCL)); |
| 547 | xfs_ipin(iip->ili_inode); | 545 | |
| 546 | atomic_inc(&iip->ili_inode->i_pincount); | ||
| 548 | } | 547 | } |
| 549 | 548 | ||
| 550 | 549 | ||
| 551 | /* | 550 | /* |
| 552 | * This is called to unpin the inode associated with the inode log | 551 | * This is called to unpin the inode associated with the inode log |
| 553 | * item which was previously pinned with a call to xfs_inode_item_pin(). | 552 | * item which was previously pinned with a call to xfs_inode_item_pin(). |
| 554 | * Just call xfs_iunpin() on the inode to do this. | 553 | * |
| 554 | * Also wake up anyone in xfs_iunpin_wait() if the count goes to 0. | ||
| 555 | */ | 555 | */ |
| 556 | /* ARGSUSED */ | 556 | /* ARGSUSED */ |
| 557 | STATIC void | 557 | STATIC void |
| @@ -559,7 +559,11 @@ xfs_inode_item_unpin( | |||
| 559 | xfs_inode_log_item_t *iip, | 559 | xfs_inode_log_item_t *iip, |
| 560 | int stale) | 560 | int stale) |
| 561 | { | 561 | { |
| 562 | xfs_iunpin(iip->ili_inode); | 562 | struct xfs_inode *ip = iip->ili_inode; |
| 563 | |||
| 564 | ASSERT(atomic_read(&ip->i_pincount) > 0); | ||
| 565 | if (atomic_dec_and_test(&ip->i_pincount)) | ||
| 566 | wake_up(&ip->i_ipin_wait); | ||
| 563 | } | 567 | } |
| 564 | 568 | ||
| 565 | /* ARGSUSED */ | 569 | /* ARGSUSED */ |
| @@ -568,7 +572,7 @@ xfs_inode_item_unpin_remove( | |||
| 568 | xfs_inode_log_item_t *iip, | 572 | xfs_inode_log_item_t *iip, |
| 569 | xfs_trans_t *tp) | 573 | xfs_trans_t *tp) |
| 570 | { | 574 | { |
| 571 | xfs_iunpin(iip->ili_inode); | 575 | xfs_inode_item_unpin(iip, 0); |
| 572 | } | 576 | } |
| 573 | 577 | ||
| 574 | /* | 578 | /* |
