]> err.no Git - linux-2.6/blobdiff - fs/xfs/xfs_log.c
[XFS] fix, speedup and simplify atime handling let the VFS handle atime
[linux-2.6] / fs / xfs / xfs_log.c
index b9d3ad35240ee9960d47a293c32c8e8e6af4a274..f6bac20af7aa9605bbc48032ebcd90c59e0cfbc1 100644 (file)
@@ -1,58 +1,47 @@
 /*
- * Copyright (c) 2000-2004 Silicon Graphics, Inc.  All Rights Reserved.
+ * Copyright (c) 2000-2005 Silicon Graphics, Inc.
+ * All Rights Reserved.
  *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
  * published by the Free Software Foundation.
  *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * This program is distributed in the hope that it would be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like.  Any license provided herein, whether implied or
- * otherwise, applies only to this software file.  Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write the Free Software Foundation, Inc., 59
- * Temple Place - Suite 330, Boston MA 02111-1307, USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA  94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write the Free Software Foundation,
+ * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
-
-/*
- * High level interface routines for log manager
- */
-
 #include "xfs.h"
-#include "xfs_macros.h"
+#include "xfs_fs.h"
 #include "xfs_types.h"
-#include "xfs_inum.h"
-#include "xfs_ag.h"
-#include "xfs_sb.h"
+#include "xfs_bit.h"
 #include "xfs_log.h"
+#include "xfs_inum.h"
 #include "xfs_trans.h"
+#include "xfs_sb.h"
+#include "xfs_ag.h"
 #include "xfs_dir.h"
+#include "xfs_dir2.h"
 #include "xfs_dmapi.h"
 #include "xfs_mount.h"
 #include "xfs_error.h"
 #include "xfs_log_priv.h"
 #include "xfs_buf_item.h"
+#include "xfs_bmap_btree.h"
 #include "xfs_alloc_btree.h"
+#include "xfs_ialloc_btree.h"
 #include "xfs_log_recover.h"
-#include "xfs_bit.h"
-#include "xfs_rw.h"
 #include "xfs_trans_priv.h"
+#include "xfs_dir_sf.h"
+#include "xfs_dir2_sf.h"
+#include "xfs_attr_sf.h"
+#include "xfs_dinode.h"
+#include "xfs_inode.h"
+#include "xfs_rw.h"
 
 
 #define xlog_write_adv_cnt(ptr, len, off, bytes) \
@@ -122,8 +111,7 @@ STATIC xlog_ticket_t        *xlog_ticket_get(xlog_t *log,
                                         uint   flags);
 STATIC void            xlog_ticket_put(xlog_t *log, xlog_ticket_t *ticket);
 
-/* local debug functions */
-#if defined(DEBUG) && !defined(XLOG_NOLOG)
+#if defined(DEBUG)
 STATIC void    xlog_verify_dest_ptr(xlog_t *log, __psint_t ptr);
 STATIC void    xlog_verify_grant_head(xlog_t *log, int equals);
 STATIC void    xlog_verify_iclog(xlog_t *log, xlog_in_core_t *iclog,
@@ -139,26 +127,7 @@ STATIC void        xlog_verify_tail_lsn(xlog_t *log, xlog_in_core_t *iclog,
 
 STATIC int     xlog_iclogs_empty(xlog_t *log);
 
-#ifdef DEBUG
-int xlog_do_error = 0;
-int xlog_req_num  = 0;
-int xlog_error_mod = 33;
-#endif
-
-#define XLOG_FORCED_SHUTDOWN(log)      (log->l_flags & XLOG_IO_ERROR)
-
-/*
- * 0 => disable log manager
- * 1 => enable log manager
- * 2 => enable log manager and log debugging
- */
-#if defined(XLOG_NOLOG) || defined(DEBUG)
-int   xlog_debug = 1;
-xfs_buftarg_t *xlog_target;
-#endif
-
 #if defined(XFS_LOG_TRACE)
-
 void
 xlog_trace_loggrant(xlog_t *log, xlog_ticket_t *tic, xfs_caddr_t string)
 {
@@ -194,36 +163,98 @@ xlog_trace_loggrant(xlog_t *log, xlog_ticket_t *tic, xfs_caddr_t string)
 void
 xlog_trace_iclog(xlog_in_core_t *iclog, uint state)
 {
-       pid_t pid;
-
-       pid = current_pid();
-
        if (!iclog->ic_trace)
                iclog->ic_trace = ktrace_alloc(256, KM_SLEEP);
        ktrace_enter(iclog->ic_trace,
                     (void *)((unsigned long)state),
-                    (void *)((unsigned long)pid),
-                    (void *)0,
-                    (void *)0,
-                    (void *)0,
-                    (void *)0,
-                    (void *)0,
-                    (void *)0,
-                    (void *)0,
-                    (void *)0,
-                    (void *)0,
-                    (void *)0,
-                    (void *)0,
-                    (void *)0,
-                    (void *)0,
-                    (void *)0);
+                    (void *)((unsigned long)current_pid()),
+                    (void *)NULL, (void *)NULL, (void *)NULL, (void *)NULL,
+                    (void *)NULL, (void *)NULL, (void *)NULL, (void *)NULL,
+                    (void *)NULL, (void *)NULL, (void *)NULL, (void *)NULL,
+                    (void *)NULL, (void *)NULL);
 }
-
 #else
 #define        xlog_trace_loggrant(log,tic,string)
 #define        xlog_trace_iclog(iclog,state)
 #endif /* XFS_LOG_TRACE */
 
+
+static void
+xlog_ins_ticketq(struct xlog_ticket **qp, struct xlog_ticket *tic)
+{
+       if (*qp) {
+               tic->t_next         = (*qp);
+               tic->t_prev         = (*qp)->t_prev;
+               (*qp)->t_prev->t_next = tic;
+               (*qp)->t_prev       = tic;
+       } else {
+               tic->t_prev = tic->t_next = tic;
+               *qp = tic;
+       }
+
+       tic->t_flags |= XLOG_TIC_IN_Q;
+}
+
+static void
+xlog_del_ticketq(struct xlog_ticket **qp, struct xlog_ticket *tic)
+{
+       if (tic == tic->t_next) {
+               *qp = NULL;
+       } else {
+               *qp = tic->t_next;
+               tic->t_next->t_prev = tic->t_prev;
+               tic->t_prev->t_next = tic->t_next;
+       }
+
+       tic->t_next = tic->t_prev = NULL;
+       tic->t_flags &= ~XLOG_TIC_IN_Q;
+}
+
+static void
+xlog_grant_sub_space(struct log *log, int bytes)
+{
+       log->l_grant_write_bytes -= bytes;
+       if (log->l_grant_write_bytes < 0) {
+               log->l_grant_write_bytes += log->l_logsize;
+               log->l_grant_write_cycle--;
+       }
+
+       log->l_grant_reserve_bytes -= bytes;
+       if ((log)->l_grant_reserve_bytes < 0) {
+               log->l_grant_reserve_bytes += log->l_logsize;
+               log->l_grant_reserve_cycle--;
+       }
+
+}
+
+static void
+xlog_grant_add_space_write(struct log *log, int bytes)
+{
+       log->l_grant_write_bytes += bytes;
+       if (log->l_grant_write_bytes > log->l_logsize) {
+               log->l_grant_write_bytes -= log->l_logsize;
+               log->l_grant_write_cycle++;
+       }
+}
+
+static void
+xlog_grant_add_space_reserve(struct log *log, int bytes)
+{
+       log->l_grant_reserve_bytes += bytes;
+       if (log->l_grant_reserve_bytes > log->l_logsize) {
+               log->l_grant_reserve_bytes -= log->l_logsize;
+               log->l_grant_reserve_cycle++;
+       }
+}
+
+static inline void
+xlog_grant_add_space(struct log *log, int bytes)
+{
+       xlog_grant_add_space_write(log, bytes);
+       xlog_grant_add_space_reserve(log, bytes);
+}
+
+
 /*
  * NOTES:
  *
@@ -255,11 +286,6 @@ xfs_log_done(xfs_mount_t   *mp,
        xlog_ticket_t   *ticket = (xfs_log_ticket_t) xtic;
        xfs_lsn_t       lsn     = 0;
 
-#if defined(DEBUG) || defined(XLOG_NOLOG)
-       if (!xlog_debug && xlog_target == log->l_targ)
-               return 0;
-#endif
-
        if (XLOG_FORCED_SHUTDOWN(log) ||
            /*
             * If nothing was ever written, don't write out commit record.
@@ -327,11 +353,6 @@ _xfs_log_force(
        if (!log_flushed)
                log_flushed = &dummy;
 
-#if defined(DEBUG) || defined(XLOG_NOLOG)
-       if (!xlog_debug && xlog_target == log->l_targ)
-               return 0;
-#endif
-
        ASSERT(flags & XFS_LOG_FORCE);
 
        XFS_STATS_INC(xs_log_force);
@@ -359,10 +380,6 @@ xfs_log_notify(xfs_mount_t   *mp,          /* mount of partition */
        xlog_in_core_t    *iclog = (xlog_in_core_t *)iclog_hndl;
        int     abortflg, spl;
 
-#if defined(DEBUG) || defined(XLOG_NOLOG)
-       if (!xlog_debug && xlog_target == log->l_targ)
-               return 0;
-#endif
        cb->cb_next = NULL;
        spl = LOG_LOCK(log);
        abortflg = (iclog->ic_state & XLOG_STATE_IOERROR);
@@ -413,13 +430,8 @@ xfs_log_reserve(xfs_mount_t         *mp,
 {
        xlog_t          *log = mp->m_log;
        xlog_ticket_t   *internal_ticket;
-       int             retval;
+       int             retval = 0;
 
-#if defined(DEBUG) || defined(XLOG_NOLOG)
-       if (!xlog_debug && xlog_target == log->l_targ)
-               return 0;
-#endif
-       retval = 0;
        ASSERT(client == XFS_TRANSACTION || client == XFS_LOG);
        ASSERT((flags & XFS_LOG_NOSLEEP) == 0);
 
@@ -481,12 +493,6 @@ xfs_log_mount(xfs_mount_t  *mp,
 
        mp->m_log = xlog_alloc_log(mp, log_target, blk_offset, num_bblks);
 
-#if defined(DEBUG) || defined(XLOG_NOLOG)
-       if (!xlog_debug) {
-               cmn_err(CE_NOTE, "log dev: %s", XFS_BUFTARG_NAME(log_target));
-               return 0;
-       }
-#endif
        /*
         * skip log recovery on a norecovery mount.  pretend it all
         * just worked.
@@ -499,7 +505,7 @@ xfs_log_mount(xfs_mount_t   *mp,
                if (readonly)
                        vfsp->vfs_flag &= ~VFS_RDONLY;
 
-               error = xlog_recover(mp->m_log, readonly);
+               error = xlog_recover(mp->m_log);
 
                if (readonly)
                        vfsp->vfs_flag |= VFS_RDONLY;
@@ -590,11 +596,6 @@ xfs_log_unmount_write(xfs_mount_t *mp)
            __uint32_t pad2; /* may as well make it 64 bits */
        } magic = { XLOG_UNMOUNT_TYPE, 0, 0 };
 
-#if defined(DEBUG) || defined(XLOG_NOLOG)
-       if (!xlog_debug && xlog_target == log->l_targ)
-               return 0;
-#endif
-
        /*
         * Don't write out unmount record on read-only mounts.
         * Or, if we are doing a forced umount (typically because of IO errors).
@@ -721,12 +722,6 @@ xfs_log_write(xfs_mount_t *        mp,
        int     error;
        xlog_t *log = mp->m_log;
 
-#if defined(DEBUG) || defined(XLOG_NOLOG)
-       if (!xlog_debug && xlog_target == log->l_targ) {
-               *start_lsn = 0;
-               return 0;
-       }
-#endif
        if (XLOG_FORCED_SHUTDOWN(log))
                return XFS_ERROR(EIO);
 
@@ -746,11 +741,6 @@ xfs_log_move_tail(xfs_mount_t      *mp,
        int             need_bytes, free_bytes, cycle, bytes;
        SPLDECL(s);
 
-#if defined(DEBUG) || defined(XLOG_NOLOG)
-       if (!xlog_debug && xlog_target == log->l_targ)
-               return;
-#endif
-       /* XXXsup tmp */
        if (XLOG_FORCED_SHUTDOWN(log))
                return;
        ASSERT(!XFS_FORCED_SHUTDOWN(mp));
@@ -1037,51 +1027,22 @@ xlog_get_iclog_buffer_size(xfs_mount_t  *mp,
        int size;
        int xhdrs;
 
-#if defined(DEBUG) || defined(XLOG_NOLOG)
-       /*
-        * When logbufs == 0, someone has disabled the log from the FSTAB
-        * file.  This is not a documented feature.  We need to set xlog_debug
-        * to zero (this deactivates the log) and set xlog_target to the
-        * appropriate device.  Only one filesystem may be affected as such
-        * since this is just a performance hack to test what we might be able
-        * to get if the log were not present.
-        */
-       if (mp->m_logbufs == 0) {
-               xlog_debug = 0;
-               xlog_target = log->l_targ;
-               log->l_iclog_bufs = XLOG_MIN_ICLOGS;
-       } else
-#endif
-       {
-               /*
-                * This is the normal path.  If m_logbufs == -1, then the
-                * admin has chosen to use the system defaults for logbuffers.
-                */
-               if (mp->m_logbufs == -1) { 
-                       if (xfs_physmem <= btoc(128*1024*1024)) { 
-                               log->l_iclog_bufs = XLOG_MIN_ICLOGS; 
-                       } else if (xfs_physmem <= btoc(400*1024*1024)) { 
-                               log->l_iclog_bufs = XLOG_MED_ICLOGS; 
-                       } else {
-                               /* 256K with 32K bufs */
-                               log->l_iclog_bufs = XLOG_MAX_ICLOGS;
-                       }
-               } else
-                       log->l_iclog_bufs = mp->m_logbufs;
-
-#if defined(DEBUG) || defined(XLOG_NOLOG)
-               /* We are reactivating a filesystem after it was inactive */
-               if (log->l_targ == xlog_target) {
-                       xlog_target = NULL;
-                       xlog_debug = 1;
+       if (mp->m_logbufs <= 0) {
+               if (xfs_physmem <= btoc(128*1024*1024)) {
+                       log->l_iclog_bufs = XLOG_MIN_ICLOGS;
+               } else if (xfs_physmem <= btoc(400*1024*1024)) {
+                       log->l_iclog_bufs = XLOG_MED_ICLOGS;
+               } else {        /* 256K with 32K bufs */
+                       log->l_iclog_bufs = XLOG_MAX_ICLOGS;
                }
-#endif
+       } else {
+               log->l_iclog_bufs = mp->m_logbufs;
        }
 
        /*
         * Buffer size passed in from mount system call.
         */
-       if (mp->m_logbsize != -1) {
+       if (mp->m_logbsize > 0) {
                size = log->l_iclog_size = mp->m_logbsize;
                log->l_iclog_size_log = 0;
                while (size != 1) {
@@ -1104,7 +1065,7 @@ xlog_get_iclog_buffer_size(xfs_mount_t    *mp,
                        log->l_iclog_hsize = BBSIZE;
                        log->l_iclog_heads = 1;
                }
-               return;
+               goto done;
        }
 
        /*
@@ -1131,7 +1092,7 @@ xlog_get_iclog_buffer_size(xfs_mount_t    *mp,
        if (mp->m_sb.sb_blocksize >= 16*1024) {
                log->l_iclog_size = XLOG_BIG_RECORD_BSIZE;
                log->l_iclog_size_log = XLOG_BIG_RECORD_BSHIFT;
-               if (mp->m_logbufs == -1) {
+               if (mp->m_logbufs <= 0) {
                        switch (mp->m_sb.sb_blocksize) {
                            case 16*1024:                       /* 16 KB */
                                log->l_iclog_bufs = 3;
@@ -1148,6 +1109,12 @@ xlog_get_iclog_buffer_size(xfs_mount_t   *mp,
                        }
                }
        }
+
+done:  /* are we being asked to make the sizes selected above visible? */
+       if (mp->m_logbufs == 0)
+               mp->m_logbufs = log->l_iclog_bufs;
+       if (mp->m_logbsize == 0)
+               mp->m_logbsize = log->l_iclog_size;
 }      /* xlog_get_iclog_buffer_size */
 
 
@@ -1430,8 +1397,7 @@ xlog_sync(xlog_t          *log,
 
        /* move grant heads by roundoff in sync */
        s = GRANT_LOCK(log);
-       XLOG_GRANT_ADD_SPACE(log, roundoff, 'w');
-       XLOG_GRANT_ADD_SPACE(log, roundoff, 'r');
+       xlog_grant_add_space(log, roundoff);
        GRANT_UNLOCK(log, s);
 
        /* put cycle number in every block */
@@ -2499,7 +2465,7 @@ xlog_grant_log_space(xlog_t          *log,
 
        /* something is already sleeping; insert new transaction at end */
        if (log->l_reserve_headq) {
-               XLOG_INS_TICKETQ(log->l_reserve_headq, tic);
+               xlog_ins_ticketq(&log->l_reserve_headq, tic);
                xlog_trace_loggrant(log, tic,
                                    "xlog_grant_log_space: sleep 1");
                /*
@@ -2532,7 +2498,7 @@ redo:
                                     log->l_grant_reserve_bytes);
        if (free_bytes < need_bytes) {
                if ((tic->t_flags & XLOG_TIC_IN_Q) == 0)
-                       XLOG_INS_TICKETQ(log->l_reserve_headq, tic);
+                       xlog_ins_ticketq(&log->l_reserve_headq, tic);
                xlog_trace_loggrant(log, tic,
                                    "xlog_grant_log_space: sleep 2");
                XFS_STATS_INC(xs_sleep_logspace);
@@ -2549,11 +2515,10 @@ redo:
                s = GRANT_LOCK(log);
                goto redo;
        } else if (tic->t_flags & XLOG_TIC_IN_Q)
-               XLOG_DEL_TICKETQ(log->l_reserve_headq, tic);
+               xlog_del_ticketq(&log->l_reserve_headq, tic);
 
        /* we've got enough space */
-       XLOG_GRANT_ADD_SPACE(log, need_bytes, 'w');
-       XLOG_GRANT_ADD_SPACE(log, need_bytes, 'r');
+       xlog_grant_add_space(log, need_bytes);
 #ifdef DEBUG
        tail_lsn = log->l_tail_lsn;
        /*
@@ -2574,7 +2539,7 @@ redo:
 
  error_return:
        if (tic->t_flags & XLOG_TIC_IN_Q)
-               XLOG_DEL_TICKETQ(log->l_reserve_headq, tic);
+               xlog_del_ticketq(&log->l_reserve_headq, tic);
        xlog_trace_loggrant(log, tic, "xlog_grant_log_space: err_ret");
        /*
         * If we are failing, make sure the ticket doesn't have any
@@ -2643,7 +2608,7 @@ xlog_regrant_write_log_space(xlog_t          *log,
 
                if (ntic != log->l_write_headq) {
                        if ((tic->t_flags & XLOG_TIC_IN_Q) == 0)
-                               XLOG_INS_TICKETQ(log->l_write_headq, tic);
+                               xlog_ins_ticketq(&log->l_write_headq, tic);
 
                        xlog_trace_loggrant(log, tic,
                                    "xlog_regrant_write_log_space: sleep 1");
@@ -2675,7 +2640,7 @@ redo:
                                     log->l_grant_write_bytes);
        if (free_bytes < need_bytes) {
                if ((tic->t_flags & XLOG_TIC_IN_Q) == 0)
-                       XLOG_INS_TICKETQ(log->l_write_headq, tic);
+                       xlog_ins_ticketq(&log->l_write_headq, tic);
                XFS_STATS_INC(xs_sleep_logspace);
                sv_wait(&tic->t_sema, PINOD|PLTWAIT, &log->l_grant_lock, s);
 
@@ -2691,9 +2656,10 @@ redo:
                s = GRANT_LOCK(log);
                goto redo;
        } else if (tic->t_flags & XLOG_TIC_IN_Q)
-               XLOG_DEL_TICKETQ(log->l_write_headq, tic);
+               xlog_del_ticketq(&log->l_write_headq, tic);
 
-       XLOG_GRANT_ADD_SPACE(log, need_bytes, 'w'); /* we've got enough space */
+       /* we've got enough space */
+       xlog_grant_add_space_write(log, need_bytes);
 #ifdef DEBUG
        tail_lsn = log->l_tail_lsn;
        if (CYCLE_LSN(tail_lsn) != log->l_grant_write_cycle) {
@@ -2710,7 +2676,7 @@ redo:
 
  error_return:
        if (tic->t_flags & XLOG_TIC_IN_Q)
-               XLOG_DEL_TICKETQ(log->l_reserve_headq, tic);
+               xlog_del_ticketq(&log->l_reserve_headq, tic);
        xlog_trace_loggrant(log, tic, "xlog_regrant_write_log_space: err_ret");
        /*
         * If we are failing, make sure the ticket doesn't have any
@@ -2743,8 +2709,7 @@ xlog_regrant_reserve_log_space(xlog_t          *log,
                ticket->t_cnt--;
 
        s = GRANT_LOCK(log);
-       XLOG_GRANT_SUB_SPACE(log, ticket->t_curr_res, 'w');
-       XLOG_GRANT_SUB_SPACE(log, ticket->t_curr_res, 'r');
+       xlog_grant_sub_space(log, ticket->t_curr_res);
        ticket->t_curr_res = ticket->t_unit_res;
        XLOG_TIC_RESET_RES(ticket);
        xlog_trace_loggrant(log, ticket,
@@ -2757,7 +2722,7 @@ xlog_regrant_reserve_log_space(xlog_t          *log,
                return;
        }
 
-       XLOG_GRANT_ADD_SPACE(log, ticket->t_unit_res, 'r');
+       xlog_grant_add_space_reserve(log, ticket->t_unit_res);
        xlog_trace_loggrant(log, ticket,
                            "xlog_regrant_reserve_log_space: exit");
        xlog_verify_grant_head(log, 0);
@@ -2793,8 +2758,7 @@ xlog_ungrant_log_space(xlog_t          *log,
        s = GRANT_LOCK(log);
        xlog_trace_loggrant(log, ticket, "xlog_ungrant_log_space: enter");
 
-       XLOG_GRANT_SUB_SPACE(log, ticket->t_curr_res, 'w');
-       XLOG_GRANT_SUB_SPACE(log, ticket->t_curr_res, 'r');
+       xlog_grant_sub_space(log, ticket->t_curr_res);
 
        xlog_trace_loggrant(log, ticket, "xlog_ungrant_log_space: sub current");
 
@@ -2803,8 +2767,7 @@ xlog_ungrant_log_space(xlog_t          *log,
         */
        if (ticket->t_cnt > 0) {
                ASSERT(ticket->t_flags & XLOG_TIC_PERM_RESERV);
-               XLOG_GRANT_SUB_SPACE(log, ticket->t_unit_res*ticket->t_cnt,'w');
-               XLOG_GRANT_SUB_SPACE(log, ticket->t_unit_res*ticket->t_cnt,'r');
+               xlog_grant_sub_space(log, ticket->t_unit_res*ticket->t_cnt);
        }
 
        xlog_trace_loggrant(log, ticket, "xlog_ungrant_log_space: exit");
@@ -3400,7 +3363,7 @@ xlog_ticket_get(xlog_t            *log,
  *
  ******************************************************************************
  */
-#if defined(DEBUG) && !defined(XLOG_NOLOG)
+#if defined(DEBUG)
 /*
  * Make sure that the destination ptr is within the valid data region of
  * one of the iclogs.  This uses backup pointers stored in a different
@@ -3564,7 +3527,7 @@ xlog_verify_iclog(xlog_t   *log,
                ptr += sizeof(xlog_op_header_t) + op_len;
        }
 }      /* xlog_verify_iclog */
-#endif /* DEBUG && !XLOG_NOLOG */
+#endif
 
 /*
  * Mark all iclogs IOERROR. LOG_LOCK is held by the caller.