xfs
[Top] [All Lists]

Re: [PATCH] Fix check for block zero access in xfs_write_iomap_allocate

To: David Chinner <dgc@xxxxxxx>
Subject: Re: [PATCH] Fix check for block zero access in xfs_write_iomap_allocate
From: Lachlan McIlroy <lachlan@xxxxxxx>
Date: Wed, 23 Apr 2008 14:06:38 +1000
Cc: xfs-dev <xfs-dev@xxxxxxx>, xfs-oss <xfs@xxxxxxxxxxx>
In-reply-to: <20080422110210.GZ103491721@xxxxxxx>
References: <20080422110210.GZ103491721@xxxxxxx>
Reply-to: lachlan@xxxxxxx
Sender: xfs-bounce@xxxxxxxxxxx
User-agent: Thunderbird 2.0.0.12 (X11/20080213)
Looks good.

David Chinner wrote:
Fix check for block zero access in xfs_write_iomap_allocate

The check for block zero access should be done on non-realtime
inodes. Fix the logic error in xfs_write_iomap_allocate(), and
simplify the logic on all checks for block zero access.

Signed-off-by: Dave Chinner <dgc@xxxxxxx>
---
 fs/xfs/xfs_iomap.c |   13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

Index: 2.6.x-xfs-new/fs/xfs/xfs_iomap.c
===================================================================
--- 2.6.x-xfs-new.orig/fs/xfs/xfs_iomap.c       2008-04-22 11:54:54.000000000 
+1000
+++ 2.6.x-xfs-new/fs/xfs/xfs_iomap.c    2008-04-22 20:45:53.469961429 +1000
@@ -523,8 +523,7 @@ xfs_iomap_write_direct(
                goto error_out;
        }
- if (unlikely(!imap.br_startblock &&
-                    !(XFS_IS_REALTIME_INODE(ip)))) {
+       if (!(imap.br_startblock || XFS_IS_REALTIME_INODE(ip))) {
                error = xfs_cmn_err_fsblock_zero(ip, &imap);
                goto error_out;
        }
@@ -686,8 +685,7 @@ retry:
                goto retry;
        }
- if (unlikely(!imap[0].br_startblock &&
-                    !(XFS_IS_REALTIME_INODE(ip))))
+       if (!(imap[0].br_startblock || XFS_IS_REALTIME_INODE(ip)))
                return xfs_cmn_err_fsblock_zero(ip, &imap[0]);
*ret_imap = imap[0];
@@ -838,9 +836,9 @@ xfs_iomap_write_allocate(
                 * See if we were able to allocate an extent that
                 * covers at least part of the callers request
                 */
-               if (unlikely(!imap.br_startblock &&
-                            XFS_IS_REALTIME_INODE(ip)))
+               if (!(imap.br_startblock || XFS_IS_REALTIME_INODE(ip)))
                        return xfs_cmn_err_fsblock_zero(ip, &imap);
+
                if ((offset_fsb >= imap.br_startoff) &&
                    (offset_fsb < (imap.br_startoff +
                                   imap.br_blockcount))) {
@@ -934,8 +932,7 @@ xfs_iomap_write_unwritten(
                if (error)
                        return XFS_ERROR(error);
- if (unlikely(!imap.br_startblock &&
-                            !(XFS_IS_REALTIME_INODE(ip))))
+               if (!(imap.br_startblock || XFS_IS_REALTIME_INODE(ip)))
                        return xfs_cmn_err_fsblock_zero(ip, &imap);
if ((numblks_fsb = imap.br_blockcount) == 0) {





<Prev in Thread] Current Thread [Next in Thread>