瀏覽代碼

[XFS] Create xfs_iflags_test_and_clear helper function

SGI-PV: 969608
SGI-Modid: xfs-linux-melb:xfs-kern:29496a

Signed-off-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: David Chinner <dgc@sgi.com>
Signed-off-by: Tim Shimmin <tes@sgi.com>
Christoph Hellwig 17 年之前
父節點
當前提交
09262b4339
共有 2 個文件被更改,包括 14 次插入6 次删除
  1. 13 0
      fs/xfs/xfs_inode.h
  2. 1 6
      fs/xfs/xfs_vnodeops.c

+ 13 - 0
fs/xfs/xfs_inode.h

@@ -360,6 +360,19 @@ xfs_iflags_test(xfs_inode_t *ip, unsigned short flags)
 	spin_unlock(&ip->i_flags_lock);
 	spin_unlock(&ip->i_flags_lock);
 	return ret;
 	return ret;
 }
 }
+
+static inline int
+xfs_iflags_test_and_clear(xfs_inode_t *ip, unsigned short flags)
+{
+	int ret;
+
+	spin_lock(&ip->i_flags_lock);
+	ret = ip->i_flags & flags;
+	if (ret)
+		ip->i_flags &= ~flags;
+	spin_unlock(&ip->i_flags_lock);
+	return ret;
+}
 #endif	/* __KERNEL__ */
 #endif	/* __KERNEL__ */
 
 
 
 

+ 1 - 6
fs/xfs/xfs_vnodeops.c

@@ -1541,12 +1541,7 @@ xfs_release(
 		 * significantly reducing the time window where we'd otherwise
 		 * significantly reducing the time window where we'd otherwise
 		 * be exposed to that problem.
 		 * be exposed to that problem.
 		 */
 		 */
-		spin_lock(&ip->i_flags_lock);
-		truncated = __xfs_iflags_test(ip, XFS_ITRUNCATED);
-		if (truncated)
-			ip->i_flags &= ~XFS_ITRUNCATED;
-		spin_unlock(&ip->i_flags_lock);
-
+		truncated = xfs_iflags_test_and_clear(ip, XFS_ITRUNCATED);
 		if (truncated && VN_DIRTY(vp) && ip->i_delayed_blks > 0)
 		if (truncated && VN_DIRTY(vp) && ip->i_delayed_blks > 0)
 			xfs_flush_pages(ip, 0, -1, XFS_B_ASYNC, FI_NONE);
 			xfs_flush_pages(ip, 0, -1, XFS_B_ASYNC, FI_NONE);
 	}
 	}