aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_log.c
diff options
context:
space:
mode:
authorNathan Scott <nathans@sgi.com>2005-11-01 23:12:04 -0500
committerNathan Scott <nathans@sgi.com>2005-11-01 23:12:04 -0500
commitcfcbbbd089eadcaa86abb2c0f352e1ab23e16f72 (patch)
tree956db132cef0939564d2ce3acbbb8cf581f35be9 /fs/xfs/xfs_log.c
parentc11e2c369d06576c9e4a900a975cbfab5e7e3c53 (diff)
[XFS] Remove old, broken nolog-mode code - noone plans to ever fix it.
SGI-PV: 944821 SGI-Modid: xfs-linux:xfs-kern:24213a Signed-off-by: Nathan Scott <nathans@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_log.c')
-rw-r--r--fs/xfs/xfs_log.c154
1 files changed, 27 insertions, 127 deletions
diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c
index a9e0c38d18a4..29af51275ca9 100644
--- a/fs/xfs/xfs_log.c
+++ b/fs/xfs/xfs_log.c
@@ -111,8 +111,7 @@ STATIC xlog_ticket_t *xlog_ticket_get(xlog_t *log,
111 uint flags); 111 uint flags);
112STATIC void xlog_ticket_put(xlog_t *log, xlog_ticket_t *ticket); 112STATIC void xlog_ticket_put(xlog_t *log, xlog_ticket_t *ticket);
113 113
114/* local debug functions */ 114#if defined(DEBUG)
115#if defined(DEBUG) && !defined(XLOG_NOLOG)
116STATIC void xlog_verify_dest_ptr(xlog_t *log, __psint_t ptr); 115STATIC void xlog_verify_dest_ptr(xlog_t *log, __psint_t ptr);
117STATIC void xlog_verify_grant_head(xlog_t *log, int equals); 116STATIC void xlog_verify_grant_head(xlog_t *log, int equals);
118STATIC void xlog_verify_iclog(xlog_t *log, xlog_in_core_t *iclog, 117STATIC void xlog_verify_iclog(xlog_t *log, xlog_in_core_t *iclog,
@@ -128,26 +127,7 @@ STATIC void xlog_verify_tail_lsn(xlog_t *log, xlog_in_core_t *iclog,
128 127
129STATIC int xlog_iclogs_empty(xlog_t *log); 128STATIC int xlog_iclogs_empty(xlog_t *log);
130 129
131#ifdef DEBUG
132int xlog_do_error = 0;
133int xlog_req_num = 0;
134int xlog_error_mod = 33;
135#endif
136
137#define XLOG_FORCED_SHUTDOWN(log) (log->l_flags & XLOG_IO_ERROR)
138
139/*
140 * 0 => disable log manager
141 * 1 => enable log manager
142 * 2 => enable log manager and log debugging
143 */
144#if defined(XLOG_NOLOG) || defined(DEBUG)
145int xlog_debug = 1;
146xfs_buftarg_t *xlog_target;
147#endif
148
149#if defined(XFS_LOG_TRACE) 130#if defined(XFS_LOG_TRACE)
150
151void 131void
152xlog_trace_loggrant(xlog_t *log, xlog_ticket_t *tic, xfs_caddr_t string) 132xlog_trace_loggrant(xlog_t *log, xlog_ticket_t *tic, xfs_caddr_t string)
153{ 133{
@@ -183,31 +163,16 @@ xlog_trace_loggrant(xlog_t *log, xlog_ticket_t *tic, xfs_caddr_t string)
183void 163void
184xlog_trace_iclog(xlog_in_core_t *iclog, uint state) 164xlog_trace_iclog(xlog_in_core_t *iclog, uint state)
185{ 165{
186 pid_t pid;
187
188 pid = current_pid();
189
190 if (!iclog->ic_trace) 166 if (!iclog->ic_trace)
191 iclog->ic_trace = ktrace_alloc(256, KM_SLEEP); 167 iclog->ic_trace = ktrace_alloc(256, KM_SLEEP);
192 ktrace_enter(iclog->ic_trace, 168 ktrace_enter(iclog->ic_trace,
193 (void *)((unsigned long)state), 169 (void *)((unsigned long)state),
194 (void *)((unsigned long)pid), 170 (void *)((unsigned long)current_pid()),
195 (void *)0, 171 (void *)NULL, (void *)NULL, (void *)NULL, (void *)NULL,
196 (void *)0, 172 (void *)NULL, (void *)NULL, (void *)NULL, (void *)NULL,
197 (void *)0, 173 (void *)NULL, (void *)NULL, (void *)NULL, (void *)NULL,
198 (void *)0, 174 (void *)NULL, (void *)NULL);
199 (void *)0,
200 (void *)0,
201 (void *)0,
202 (void *)0,
203 (void *)0,
204 (void *)0,
205 (void *)0,
206 (void *)0,
207 (void *)0,
208 (void *)0);
209} 175}
210
211#else 176#else
212#define xlog_trace_loggrant(log,tic,string) 177#define xlog_trace_loggrant(log,tic,string)
213#define xlog_trace_iclog(iclog,state) 178#define xlog_trace_iclog(iclog,state)
@@ -244,11 +209,6 @@ xfs_log_done(xfs_mount_t *mp,
244 xlog_ticket_t *ticket = (xfs_log_ticket_t) xtic; 209 xlog_ticket_t *ticket = (xfs_log_ticket_t) xtic;
245 xfs_lsn_t lsn = 0; 210 xfs_lsn_t lsn = 0;
246 211
247#if defined(DEBUG) || defined(XLOG_NOLOG)
248 if (!xlog_debug && xlog_target == log->l_targ)
249 return 0;
250#endif
251
252 if (XLOG_FORCED_SHUTDOWN(log) || 212 if (XLOG_FORCED_SHUTDOWN(log) ||
253 /* 213 /*
254 * If nothing was ever written, don't write out commit record. 214 * If nothing was ever written, don't write out commit record.
@@ -316,11 +276,6 @@ _xfs_log_force(
316 if (!log_flushed) 276 if (!log_flushed)
317 log_flushed = &dummy; 277 log_flushed = &dummy;
318 278
319#if defined(DEBUG) || defined(XLOG_NOLOG)
320 if (!xlog_debug && xlog_target == log->l_targ)
321 return 0;
322#endif
323
324 ASSERT(flags & XFS_LOG_FORCE); 279 ASSERT(flags & XFS_LOG_FORCE);
325 280
326 XFS_STATS_INC(xs_log_force); 281 XFS_STATS_INC(xs_log_force);
@@ -348,10 +303,6 @@ xfs_log_notify(xfs_mount_t *mp, /* mount of partition */
348 xlog_in_core_t *iclog = (xlog_in_core_t *)iclog_hndl; 303 xlog_in_core_t *iclog = (xlog_in_core_t *)iclog_hndl;
349 int abortflg, spl; 304 int abortflg, spl;
350 305
351#if defined(DEBUG) || defined(XLOG_NOLOG)
352 if (!xlog_debug && xlog_target == log->l_targ)
353 return 0;
354#endif
355 cb->cb_next = NULL; 306 cb->cb_next = NULL;
356 spl = LOG_LOCK(log); 307 spl = LOG_LOCK(log);
357 abortflg = (iclog->ic_state & XLOG_STATE_IOERROR); 308 abortflg = (iclog->ic_state & XLOG_STATE_IOERROR);
@@ -402,13 +353,8 @@ xfs_log_reserve(xfs_mount_t *mp,
402{ 353{
403 xlog_t *log = mp->m_log; 354 xlog_t *log = mp->m_log;
404 xlog_ticket_t *internal_ticket; 355 xlog_ticket_t *internal_ticket;
405 int retval; 356 int retval = 0;
406 357
407#if defined(DEBUG) || defined(XLOG_NOLOG)
408 if (!xlog_debug && xlog_target == log->l_targ)
409 return 0;
410#endif
411 retval = 0;
412 ASSERT(client == XFS_TRANSACTION || client == XFS_LOG); 358 ASSERT(client == XFS_TRANSACTION || client == XFS_LOG);
413 ASSERT((flags & XFS_LOG_NOSLEEP) == 0); 359 ASSERT((flags & XFS_LOG_NOSLEEP) == 0);
414 360
@@ -470,13 +416,6 @@ xfs_log_mount(xfs_mount_t *mp,
470 416
471 mp->m_log = xlog_alloc_log(mp, log_target, blk_offset, num_bblks); 417 mp->m_log = xlog_alloc_log(mp, log_target, blk_offset, num_bblks);
472 418
473#if defined(DEBUG) || defined(XLOG_NOLOG)
474 if (!xlog_debug) {
475 cmn_err(CE_NOTE, "logdev: %s", mp->m_logname ?
476 mp->m_logname : "internal");
477 return 0;
478 }
479#endif
480 /* 419 /*
481 * skip log recovery on a norecovery mount. pretend it all 420 * skip log recovery on a norecovery mount. pretend it all
482 * just worked. 421 * just worked.
@@ -580,11 +519,6 @@ xfs_log_unmount_write(xfs_mount_t *mp)
580 __uint32_t pad2; /* may as well make it 64 bits */ 519 __uint32_t pad2; /* may as well make it 64 bits */
581 } magic = { XLOG_UNMOUNT_TYPE, 0, 0 }; 520 } magic = { XLOG_UNMOUNT_TYPE, 0, 0 };
582 521
583#if defined(DEBUG) || defined(XLOG_NOLOG)
584 if (!xlog_debug && xlog_target == log->l_targ)
585 return 0;
586#endif
587
588 /* 522 /*
589 * Don't write out unmount record on read-only mounts. 523 * Don't write out unmount record on read-only mounts.
590 * Or, if we are doing a forced umount (typically because of IO errors). 524 * Or, if we are doing a forced umount (typically because of IO errors).
@@ -711,12 +645,6 @@ xfs_log_write(xfs_mount_t * mp,
711 int error; 645 int error;
712 xlog_t *log = mp->m_log; 646 xlog_t *log = mp->m_log;
713 647
714#if defined(DEBUG) || defined(XLOG_NOLOG)
715 if (!xlog_debug && xlog_target == log->l_targ) {
716 *start_lsn = 0;
717 return 0;
718 }
719#endif
720 if (XLOG_FORCED_SHUTDOWN(log)) 648 if (XLOG_FORCED_SHUTDOWN(log))
721 return XFS_ERROR(EIO); 649 return XFS_ERROR(EIO);
722 650
@@ -736,11 +664,6 @@ xfs_log_move_tail(xfs_mount_t *mp,
736 int need_bytes, free_bytes, cycle, bytes; 664 int need_bytes, free_bytes, cycle, bytes;
737 SPLDECL(s); 665 SPLDECL(s);
738 666
739#if defined(DEBUG) || defined(XLOG_NOLOG)
740 if (!xlog_debug && xlog_target == log->l_targ)
741 return;
742#endif
743 /* XXXsup tmp */
744 if (XLOG_FORCED_SHUTDOWN(log)) 667 if (XLOG_FORCED_SHUTDOWN(log))
745 return; 668 return;
746 ASSERT(!XFS_FORCED_SHUTDOWN(mp)); 669 ASSERT(!XFS_FORCED_SHUTDOWN(mp));
@@ -1027,51 +950,22 @@ xlog_get_iclog_buffer_size(xfs_mount_t *mp,
1027 int size; 950 int size;
1028 int xhdrs; 951 int xhdrs;
1029 952
1030#if defined(DEBUG) || defined(XLOG_NOLOG) 953 if (mp->m_logbufs <= 0) {
1031 /* 954 if (xfs_physmem <= btoc(128*1024*1024)) {
1032 * When logbufs == 0, someone has disabled the log from the FSTAB 955 log->l_iclog_bufs = XLOG_MIN_ICLOGS;
1033 * file. This is not a documented feature. We need to set xlog_debug 956 } else if (xfs_physmem <= btoc(400*1024*1024)) {
1034 * to zero (this deactivates the log) and set xlog_target to the 957 log->l_iclog_bufs = XLOG_MED_ICLOGS;
1035 * appropriate device. Only one filesystem may be affected as such 958 } else { /* 256K with 32K bufs */
1036 * since this is just a performance hack to test what we might be able 959 log->l_iclog_bufs = XLOG_MAX_ICLOGS;
1037 * to get if the log were not present.
1038 */
1039 if (mp->m_logbufs == 0) {
1040 xlog_debug = 0;
1041 xlog_target = log->l_targ;
1042 log->l_iclog_bufs = XLOG_MIN_ICLOGS;
1043 } else
1044#endif
1045 {
1046 /*
1047 * This is the normal path. If m_logbufs == -1, then the
1048 * admin has chosen to use the system defaults for logbuffers.
1049 */
1050 if (mp->m_logbufs == -1) {
1051 if (xfs_physmem <= btoc(128*1024*1024)) {
1052 log->l_iclog_bufs = XLOG_MIN_ICLOGS;
1053 } else if (xfs_physmem <= btoc(400*1024*1024)) {
1054 log->l_iclog_bufs = XLOG_MED_ICLOGS;
1055 } else {
1056 /* 256K with 32K bufs */
1057 log->l_iclog_bufs = XLOG_MAX_ICLOGS;
1058 }
1059 } else
1060 log->l_iclog_bufs = mp->m_logbufs;
1061
1062#if defined(DEBUG) || defined(XLOG_NOLOG)
1063 /* We are reactivating a filesystem after it was inactive */
1064 if (log->l_targ == xlog_target) {
1065 xlog_target = NULL;
1066 xlog_debug = 1;
1067 } 960 }
1068#endif 961 } else {
962 log->l_iclog_bufs = mp->m_logbufs;
1069 } 963 }
1070 964
1071 /* 965 /*
1072 * Buffer size passed in from mount system call. 966 * Buffer size passed in from mount system call.
1073 */ 967 */
1074 if (mp->m_logbsize != -1) { 968 if (mp->m_logbsize > 0) {
1075 size = log->l_iclog_size = mp->m_logbsize; 969 size = log->l_iclog_size = mp->m_logbsize;
1076 log->l_iclog_size_log = 0; 970 log->l_iclog_size_log = 0;
1077 while (size != 1) { 971 while (size != 1) {
@@ -1094,7 +988,7 @@ xlog_get_iclog_buffer_size(xfs_mount_t *mp,
1094 log->l_iclog_hsize = BBSIZE; 988 log->l_iclog_hsize = BBSIZE;
1095 log->l_iclog_heads = 1; 989 log->l_iclog_heads = 1;
1096 } 990 }
1097 return; 991 goto done;
1098 } 992 }
1099 993
1100 /* 994 /*
@@ -1121,7 +1015,7 @@ xlog_get_iclog_buffer_size(xfs_mount_t *mp,
1121 if (mp->m_sb.sb_blocksize >= 16*1024) { 1015 if (mp->m_sb.sb_blocksize >= 16*1024) {
1122 log->l_iclog_size = XLOG_BIG_RECORD_BSIZE; 1016 log->l_iclog_size = XLOG_BIG_RECORD_BSIZE;
1123 log->l_iclog_size_log = XLOG_BIG_RECORD_BSHIFT; 1017 log->l_iclog_size_log = XLOG_BIG_RECORD_BSHIFT;
1124 if (mp->m_logbufs == -1) { 1018 if (mp->m_logbufs <= 0) {
1125 switch (mp->m_sb.sb_blocksize) { 1019 switch (mp->m_sb.sb_blocksize) {
1126 case 16*1024: /* 16 KB */ 1020 case 16*1024: /* 16 KB */
1127 log->l_iclog_bufs = 3; 1021 log->l_iclog_bufs = 3;
@@ -1138,6 +1032,12 @@ xlog_get_iclog_buffer_size(xfs_mount_t *mp,
1138 } 1032 }
1139 } 1033 }
1140 } 1034 }
1035
1036done: /* are we being asked to make the sizes selected above visible? */
1037 if (mp->m_logbufs == 0)
1038 mp->m_logbufs = log->l_iclog_bufs;
1039 if (mp->m_logbsize == 0)
1040 mp->m_logbsize = log->l_iclog_size;
1141} /* xlog_get_iclog_buffer_size */ 1041} /* xlog_get_iclog_buffer_size */
1142 1042
1143 1043
@@ -3390,7 +3290,7 @@ xlog_ticket_get(xlog_t *log,
3390 * 3290 *
3391 ****************************************************************************** 3291 ******************************************************************************
3392 */ 3292 */
3393#if defined(DEBUG) && !defined(XLOG_NOLOG) 3293#if defined(DEBUG)
3394/* 3294/*
3395 * Make sure that the destination ptr is within the valid data region of 3295 * Make sure that the destination ptr is within the valid data region of
3396 * one of the iclogs. This uses backup pointers stored in a different 3296 * one of the iclogs. This uses backup pointers stored in a different
@@ -3554,7 +3454,7 @@ xlog_verify_iclog(xlog_t *log,
3554 ptr += sizeof(xlog_op_header_t) + op_len; 3454 ptr += sizeof(xlog_op_header_t) + op_len;
3555 } 3455 }
3556} /* xlog_verify_iclog */ 3456} /* xlog_verify_iclog */
3557#endif /* DEBUG && !XLOG_NOLOG */ 3457#endif
3558 3458
3559/* 3459/*
3560 * Mark all iclogs IOERROR. LOG_LOCK is held by the caller. 3460 * Mark all iclogs IOERROR. LOG_LOCK is held by the caller.