diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-10-03 13:28:46 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-10-03 13:28:46 -0400 |
commit | f68ec0c24755e5cdb779be6240925f2175311d84 (patch) | |
tree | a7b7128e61a8456385d82bd1c7ca5f14eecbf2ca /fs/xfs/xfs_inode_item.c | |
parent | 98920dc3d1113b883cbc73e3293446d3525c6042 (diff) | |
parent | 94aca1dac6f6d21f4b07e4864baf7768cabcc6e7 (diff) |
Merge commit 'v2.6.27-rc8' into x86/setup
Diffstat (limited to 'fs/xfs/xfs_inode_item.c')
-rw-r--r-- | fs/xfs/xfs_inode_item.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c index 167b33f15772..97c7452e2620 100644 --- a/fs/xfs/xfs_inode_item.c +++ b/fs/xfs/xfs_inode_item.c | |||
@@ -686,7 +686,7 @@ xfs_inode_item_unlock( | |||
686 | ASSERT(ip->i_d.di_nextents > 0); | 686 | ASSERT(ip->i_d.di_nextents > 0); |
687 | ASSERT(iip->ili_format.ilf_fields & XFS_ILOG_DEXT); | 687 | ASSERT(iip->ili_format.ilf_fields & XFS_ILOG_DEXT); |
688 | ASSERT(ip->i_df.if_bytes > 0); | 688 | ASSERT(ip->i_df.if_bytes > 0); |
689 | kmem_free(iip->ili_extents_buf, ip->i_df.if_bytes); | 689 | kmem_free(iip->ili_extents_buf); |
690 | iip->ili_extents_buf = NULL; | 690 | iip->ili_extents_buf = NULL; |
691 | } | 691 | } |
692 | if (iip->ili_aextents_buf != NULL) { | 692 | if (iip->ili_aextents_buf != NULL) { |
@@ -694,7 +694,7 @@ xfs_inode_item_unlock( | |||
694 | ASSERT(ip->i_d.di_anextents > 0); | 694 | ASSERT(ip->i_d.di_anextents > 0); |
695 | ASSERT(iip->ili_format.ilf_fields & XFS_ILOG_AEXT); | 695 | ASSERT(iip->ili_format.ilf_fields & XFS_ILOG_AEXT); |
696 | ASSERT(ip->i_afp->if_bytes > 0); | 696 | ASSERT(ip->i_afp->if_bytes > 0); |
697 | kmem_free(iip->ili_aextents_buf, ip->i_afp->if_bytes); | 697 | kmem_free(iip->ili_aextents_buf); |
698 | iip->ili_aextents_buf = NULL; | 698 | iip->ili_aextents_buf = NULL; |
699 | } | 699 | } |
700 | 700 | ||
@@ -779,11 +779,10 @@ xfs_inode_item_pushbuf( | |||
779 | ASSERT(iip->ili_push_owner == current_pid()); | 779 | ASSERT(iip->ili_push_owner == current_pid()); |
780 | 780 | ||
781 | /* | 781 | /* |
782 | * If flushlock isn't locked anymore, chances are that the | 782 | * If a flush is not in progress anymore, chances are that the |
783 | * inode flush completed and the inode was taken off the AIL. | 783 | * inode was taken off the AIL. So, just get out. |
784 | * So, just get out. | ||
785 | */ | 784 | */ |
786 | if (!issemalocked(&(ip->i_flock)) || | 785 | if (completion_done(&ip->i_flush) || |
787 | ((iip->ili_item.li_flags & XFS_LI_IN_AIL) == 0)) { | 786 | ((iip->ili_item.li_flags & XFS_LI_IN_AIL) == 0)) { |
788 | iip->ili_pushbuf_flag = 0; | 787 | iip->ili_pushbuf_flag = 0; |
789 | xfs_iunlock(ip, XFS_ILOCK_SHARED); | 788 | xfs_iunlock(ip, XFS_ILOCK_SHARED); |
@@ -805,7 +804,7 @@ xfs_inode_item_pushbuf( | |||
805 | * If not, we can flush it async. | 804 | * If not, we can flush it async. |
806 | */ | 805 | */ |
807 | dopush = ((iip->ili_item.li_flags & XFS_LI_IN_AIL) && | 806 | dopush = ((iip->ili_item.li_flags & XFS_LI_IN_AIL) && |
808 | issemalocked(&(ip->i_flock))); | 807 | !completion_done(&ip->i_flush)); |
809 | iip->ili_pushbuf_flag = 0; | 808 | iip->ili_pushbuf_flag = 0; |
810 | xfs_iunlock(ip, XFS_ILOCK_SHARED); | 809 | xfs_iunlock(ip, XFS_ILOCK_SHARED); |
811 | xfs_buftrace("INODE ITEM PUSH", bp); | 810 | xfs_buftrace("INODE ITEM PUSH", bp); |
@@ -858,7 +857,7 @@ xfs_inode_item_push( | |||
858 | ip = iip->ili_inode; | 857 | ip = iip->ili_inode; |
859 | 858 | ||
860 | ASSERT(xfs_isilocked(ip, XFS_ILOCK_SHARED)); | 859 | ASSERT(xfs_isilocked(ip, XFS_ILOCK_SHARED)); |
861 | ASSERT(issemalocked(&(ip->i_flock))); | 860 | ASSERT(!completion_done(&ip->i_flush)); |
862 | /* | 861 | /* |
863 | * Since we were able to lock the inode's flush lock and | 862 | * Since we were able to lock the inode's flush lock and |
864 | * we found it on the AIL, the inode must be dirty. This | 863 | * we found it on the AIL, the inode must be dirty. This |
@@ -957,8 +956,7 @@ xfs_inode_item_destroy( | |||
957 | { | 956 | { |
958 | #ifdef XFS_TRANS_DEBUG | 957 | #ifdef XFS_TRANS_DEBUG |
959 | if (ip->i_itemp->ili_root_size != 0) { | 958 | if (ip->i_itemp->ili_root_size != 0) { |
960 | kmem_free(ip->i_itemp->ili_orig_root, | 959 | kmem_free(ip->i_itemp->ili_orig_root); |
961 | ip->i_itemp->ili_root_size); | ||
962 | } | 960 | } |
963 | #endif | 961 | #endif |
964 | kmem_zone_free(xfs_ili_zone, ip->i_itemp); | 962 | kmem_zone_free(xfs_ili_zone, ip->i_itemp); |