xfs
[Top] [All Lists]

[patch] Use xfs_inode_clean() in more places

To: xfs-dev <xfs-dev@xxxxxxx>
Subject: [patch] Use xfs_inode_clean() in more places
From: David Chinner <dgc@xxxxxxx>
Date: Mon, 21 Jan 2008 16:16:47 +1100
Cc: xfs-oss <xfs@xxxxxxxxxxx>
Sender: xfs-bounce@xxxxxxxxxxx
User-agent: Mutt/1.4.2.1i
Use xfs_inode_clean() in more places.

Version 2:
- remove eye-hurting STATIC_INLINE
- make check less verbose

Signed-off-by: Dave Chinner <dgc@xxxxxxx>
---
 fs/xfs/xfs_inode.c      |   27 +++++----------------------
 fs/xfs/xfs_inode_item.h |    8 ++++++++
 fs/xfs/xfs_vnodeops.c   |    4 +---
 3 files changed, 14 insertions(+), 25 deletions(-)

Index: 2.6.x-xfs-new/fs/xfs/xfs_inode.c
===================================================================
--- 2.6.x-xfs-new.orig/fs/xfs/xfs_inode.c       2008-01-21 16:06:27.000000000 
+1100
+++ 2.6.x-xfs-new/fs/xfs/xfs_inode.c    2008-01-21 16:08:47.893673473 +1100
@@ -2118,13 +2118,6 @@ xfs_iunlink_remove(
        return 0;
 }
 
-STATIC_INLINE int xfs_inode_clean(xfs_inode_t *ip)
-{
-       return (((ip->i_itemp == NULL) ||
-               !(ip->i_itemp->ili_format.ilf_fields & XFS_ILOG_ALL)) &&
-               (ip->i_update_core == 0));
-}
-
 STATIC void
 xfs_ifree_cluster(
        xfs_inode_t     *free_ip,
@@ -3004,7 +2997,6 @@ xfs_iflush_cluster(
        int                     ilist_size;
        xfs_inode_t             *ilist;
        xfs_inode_t             *iq;
-       xfs_inode_log_item_t    *iip;
        int                     nr_found;
        int                     clcount = 0;
        int                     bufwasdelwri;
@@ -3038,13 +3030,8 @@ xfs_iflush_cluster(
                 * is a candidate for flushing.  These checks will be repeated
                 * later after the appropriate locks are acquired.
                 */
-               iip = iq->i_itemp;
-               if ((iq->i_update_core == 0) &&
-                   ((iip == NULL) ||
-                    !(iip->ili_format.ilf_fields & XFS_ILOG_ALL)) &&
-                     xfs_ipincount(iq) == 0) {
+               if (xfs_inode_clean(iq) && xfs_ipincount(iq) == 0)
                        continue;
-               }
 
                /*
                 * Try to get locks.  If any are unavailable or it is pinned,
@@ -3067,10 +3054,8 @@ xfs_iflush_cluster(
                 * arriving here means that this inode can be flushed.  First
                 * re-check that it's dirty before flushing.
                 */
-               iip = iq->i_itemp;
-               if ((iq->i_update_core != 0) || ((iip != NULL) &&
-                    (iip->ili_format.ilf_fields & XFS_ILOG_ALL))) {
-                       int error;
+               if (!xfs_inode_clean(iq)) {
+                       int     error;
                        error = xfs_iflush_int(iq, bp);
                        if (error) {
                                xfs_iunlock(iq, XFS_ILOCK_SHARED);
@@ -3174,8 +3159,7 @@ xfs_iflush(
         * If the inode isn't dirty, then just release the inode
         * flush lock and do nothing.
         */
-       if ((ip->i_update_core == 0) &&
-           ((iip == NULL) || !(iip->ili_format.ilf_fields & XFS_ILOG_ALL))) {
+       if (xfs_inode_clean(ip)) {
                ASSERT((iip != NULL) ?
                         !(iip->ili_item.li_flags & XFS_LI_IN_AIL) : 1);
                xfs_ifunlock(ip);
@@ -3341,8 +3325,7 @@ xfs_iflush_int(
         * If the inode isn't dirty, then just release the inode
         * flush lock and do nothing.
         */
-       if ((ip->i_update_core == 0) &&
-           ((iip == NULL) || !(iip->ili_format.ilf_fields & XFS_ILOG_ALL))) {
+       if (xfs_inode_clean(ip)) {
                xfs_ifunlock(ip);
                return 0;
        }
Index: 2.6.x-xfs-new/fs/xfs/xfs_vnodeops.c
===================================================================
--- 2.6.x-xfs-new.orig/fs/xfs/xfs_vnodeops.c    2008-01-21 16:06:27.000000000 
+1100
+++ 2.6.x-xfs-new/fs/xfs/xfs_vnodeops.c 2008-01-21 16:08:47.897672964 +1100
@@ -3490,7 +3490,6 @@ xfs_inode_flush(
        int             flags)
 {
        xfs_mount_t     *mp = ip->i_mount;
-       xfs_inode_log_item_t *iip = ip->i_itemp;
        int             error = 0;
 
        if (XFS_FORCED_SHUTDOWN(mp))
@@ -3500,8 +3499,7 @@ xfs_inode_flush(
         * Bypass inodes which have already been cleaned by
         * the inode flush clustering code inside xfs_iflush
         */
-       if ((ip->i_update_core == 0) &&
-           ((iip == NULL) || !(iip->ili_format.ilf_fields & XFS_ILOG_ALL)))
+       if (xfs_inode_clean(ip))
                return 0;
 
        /*
Index: 2.6.x-xfs-new/fs/xfs/xfs_inode_item.h
===================================================================
--- 2.6.x-xfs-new.orig/fs/xfs/xfs_inode_item.h  2008-01-21 16:06:27.000000000 
+1100
+++ 2.6.x-xfs-new/fs/xfs/xfs_inode_item.h       2008-01-21 16:14:34.001674576 
+1100
@@ -168,6 +168,14 @@ static inline int xfs_ilog_fext(int w)
        return (w == XFS_DATA_FORK ? XFS_ILOG_DEXT : XFS_ILOG_AEXT);
 }
 
+static inline int xfs_inode_clean(xfs_inode_t *ip)
+{
+       return (!ip->i_itemp ||
+               !(ip->i_itemp->ili_format.ilf_fields & XFS_ILOG_ALL)) &&
+              !ip->i_update_core;
+}
+
+
 #ifdef __KERNEL__
 
 extern void xfs_inode_item_init(struct xfs_inode *, struct xfs_mount *);


<Prev in Thread] Current Thread [Next in Thread>
  • [patch] Use xfs_inode_clean() in more places, David Chinner <=