diff options
Diffstat (limited to 'fs/xfs')
| -rw-r--r-- | fs/xfs/xfs_log.c | 154 | ||||
| -rw-r--r-- | fs/xfs/xfs_log_priv.h | 2 | ||||
| -rw-r--r-- | fs/xfs/xfs_trans.c | 43 | ||||
| -rw-r--r-- | fs/xfs/xfs_vfsops.c | 8 |
4 files changed, 39 insertions, 168 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); |
| 112 | STATIC void xlog_ticket_put(xlog_t *log, xlog_ticket_t *ticket); | 112 | STATIC 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) | ||
| 116 | STATIC void xlog_verify_dest_ptr(xlog_t *log, __psint_t ptr); | 115 | STATIC void xlog_verify_dest_ptr(xlog_t *log, __psint_t ptr); |
| 117 | STATIC void xlog_verify_grant_head(xlog_t *log, int equals); | 116 | STATIC void xlog_verify_grant_head(xlog_t *log, int equals); |
| 118 | STATIC void xlog_verify_iclog(xlog_t *log, xlog_in_core_t *iclog, | 117 | STATIC 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 | ||
| 129 | STATIC int xlog_iclogs_empty(xlog_t *log); | 128 | STATIC int xlog_iclogs_empty(xlog_t *log); |
| 130 | 129 | ||
| 131 | #ifdef DEBUG | ||
| 132 | int xlog_do_error = 0; | ||
| 133 | int xlog_req_num = 0; | ||
| 134 | int 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) | ||
| 145 | int xlog_debug = 1; | ||
| 146 | xfs_buftarg_t *xlog_target; | ||
| 147 | #endif | ||
| 148 | |||
| 149 | #if defined(XFS_LOG_TRACE) | 130 | #if defined(XFS_LOG_TRACE) |
| 150 | |||
| 151 | void | 131 | void |
| 152 | xlog_trace_loggrant(xlog_t *log, xlog_ticket_t *tic, xfs_caddr_t string) | 132 | xlog_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) | |||
| 183 | void | 163 | void |
| 184 | xlog_trace_iclog(xlog_in_core_t *iclog, uint state) | 164 | xlog_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 | |||
| 1036 | done: /* 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. |
diff --git a/fs/xfs/xfs_log_priv.h b/fs/xfs/xfs_log_priv.h index 758e4eb67c0c..8f285149681f 100644 --- a/fs/xfs/xfs_log_priv.h +++ b/fs/xfs/xfs_log_priv.h | |||
| @@ -492,6 +492,8 @@ typedef struct log { | |||
| 492 | * alignment mask */ | 492 | * alignment mask */ |
| 493 | } xlog_t; | 493 | } xlog_t; |
| 494 | 494 | ||
| 495 | #define XLOG_FORCED_SHUTDOWN(log) ((log)->l_flags & XLOG_IO_ERROR) | ||
| 496 | |||
| 495 | #define XLOG_GRANT_SUB_SPACE(log,bytes,type) \ | 497 | #define XLOG_GRANT_SUB_SPACE(log,bytes,type) \ |
| 496 | xlog_grant_sub_space(log,bytes,type) | 498 | xlog_grant_sub_space(log,bytes,type) |
| 497 | static inline void xlog_grant_sub_space(struct log *log, int bytes, int type) | 499 | static inline void xlog_grant_sub_space(struct log *log, int bytes, int type) |
diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c index de3abf868ee3..279e043d7323 100644 --- a/fs/xfs/xfs_trans.c +++ b/fs/xfs/xfs_trans.c | |||
| @@ -176,12 +176,8 @@ xfs_trans_dup( | |||
| 176 | XFS_LBC_INIT(&(ntp->t_busy)); | 176 | XFS_LBC_INIT(&(ntp->t_busy)); |
| 177 | 177 | ||
| 178 | ASSERT(tp->t_flags & XFS_TRANS_PERM_LOG_RES); | 178 | ASSERT(tp->t_flags & XFS_TRANS_PERM_LOG_RES); |
| 179 | |||
| 180 | #if defined(XLOG_NOLOG) || defined(DEBUG) | ||
| 181 | ASSERT(!xlog_debug || tp->t_ticket != NULL); | ||
| 182 | #else | ||
| 183 | ASSERT(tp->t_ticket != NULL); | 179 | ASSERT(tp->t_ticket != NULL); |
| 184 | #endif | 180 | |
| 185 | ntp->t_flags = XFS_TRANS_PERM_LOG_RES | (tp->t_flags & XFS_TRANS_RESERVE); | 181 | ntp->t_flags = XFS_TRANS_PERM_LOG_RES | (tp->t_flags & XFS_TRANS_RESERVE); |
| 186 | ntp->t_ticket = tp->t_ticket; | 182 | ntp->t_ticket = tp->t_ticket; |
| 187 | ntp->t_blk_res = tp->t_blk_res - tp->t_blk_res_used; | 183 | ntp->t_blk_res = tp->t_blk_res - tp->t_blk_res_used; |
| @@ -663,9 +659,6 @@ _xfs_trans_commit( | |||
| 663 | int sync; | 659 | int sync; |
| 664 | #define XFS_TRANS_LOGVEC_COUNT 16 | 660 | #define XFS_TRANS_LOGVEC_COUNT 16 |
| 665 | xfs_log_iovec_t log_vector_fast[XFS_TRANS_LOGVEC_COUNT]; | 661 | xfs_log_iovec_t log_vector_fast[XFS_TRANS_LOGVEC_COUNT]; |
| 666 | #if defined(XLOG_NOLOG) || defined(DEBUG) | ||
| 667 | static xfs_lsn_t trans_lsn = 1; | ||
| 668 | #endif | ||
| 669 | void *commit_iclog; | 662 | void *commit_iclog; |
| 670 | int shutdown; | 663 | int shutdown; |
| 671 | 664 | ||
| @@ -716,11 +709,7 @@ shut_us_down: | |||
| 716 | *commit_lsn_p = commit_lsn; | 709 | *commit_lsn_p = commit_lsn; |
| 717 | return (shutdown); | 710 | return (shutdown); |
| 718 | } | 711 | } |
| 719 | #if defined(XLOG_NOLOG) || defined(DEBUG) | ||
| 720 | ASSERT(!xlog_debug || tp->t_ticket != NULL); | ||
| 721 | #else | ||
| 722 | ASSERT(tp->t_ticket != NULL); | 712 | ASSERT(tp->t_ticket != NULL); |
| 723 | #endif | ||
| 724 | 713 | ||
| 725 | /* | 714 | /* |
| 726 | * If we need to update the superblock, then do it now. | 715 | * If we need to update the superblock, then do it now. |
| @@ -737,14 +726,10 @@ shut_us_down: | |||
| 737 | * by using a vector from the stack when it fits. | 726 | * by using a vector from the stack when it fits. |
| 738 | */ | 727 | */ |
| 739 | nvec = xfs_trans_count_vecs(tp); | 728 | nvec = xfs_trans_count_vecs(tp); |
| 740 | |||
| 741 | if (nvec == 0) { | 729 | if (nvec == 0) { |
| 742 | xfs_force_shutdown(mp, XFS_LOG_IO_ERROR); | 730 | xfs_force_shutdown(mp, XFS_LOG_IO_ERROR); |
| 743 | goto shut_us_down; | 731 | goto shut_us_down; |
| 744 | } | 732 | } else if (nvec <= XFS_TRANS_LOGVEC_COUNT) { |
| 745 | |||
| 746 | |||
| 747 | if (nvec <= XFS_TRANS_LOGVEC_COUNT) { | ||
| 748 | log_vector = log_vector_fast; | 733 | log_vector = log_vector_fast; |
| 749 | } else { | 734 | } else { |
| 750 | log_vector = (xfs_log_iovec_t *)kmem_alloc(nvec * | 735 | log_vector = (xfs_log_iovec_t *)kmem_alloc(nvec * |
| @@ -758,30 +743,14 @@ shut_us_down: | |||
| 758 | */ | 743 | */ |
| 759 | xfs_trans_fill_vecs(tp, log_vector); | 744 | xfs_trans_fill_vecs(tp, log_vector); |
| 760 | 745 | ||
| 761 | /* | 746 | error = xfs_log_write(mp, log_vector, nvec, tp->t_ticket, &(tp->t_lsn)); |
| 762 | * Ignore errors here. xfs_log_done would do the right thing. | ||
| 763 | * We need to put the ticket, etc. away. | ||
| 764 | */ | ||
| 765 | error = xfs_log_write(mp, log_vector, nvec, tp->t_ticket, | ||
| 766 | &(tp->t_lsn)); | ||
| 767 | 747 | ||
| 768 | #if defined(XLOG_NOLOG) || defined(DEBUG) | ||
| 769 | if (xlog_debug) { | ||
| 770 | commit_lsn = xfs_log_done(mp, tp->t_ticket, | ||
| 771 | &commit_iclog, log_flags); | ||
| 772 | } else { | ||
| 773 | commit_lsn = 0; | ||
| 774 | tp->t_lsn = trans_lsn++; | ||
| 775 | } | ||
| 776 | #else | ||
| 777 | /* | 748 | /* |
| 778 | * This is the regular case. At this point (after the call finishes), | 749 | * The transaction is committed incore here, and can go out to disk |
| 779 | * the transaction is committed incore and could go out to disk at | 750 | * at any time after this call. However, all the items associated |
| 780 | * any time. However, all the items associated with the transaction | 751 | * with the transaction are still locked and pinned in memory. |
| 781 | * are still locked and pinned in memory. | ||
| 782 | */ | 752 | */ |
| 783 | commit_lsn = xfs_log_done(mp, tp->t_ticket, &commit_iclog, log_flags); | 753 | commit_lsn = xfs_log_done(mp, tp->t_ticket, &commit_iclog, log_flags); |
| 784 | #endif | ||
| 785 | 754 | ||
| 786 | tp->t_commit_lsn = commit_lsn; | 755 | tp->t_commit_lsn = commit_lsn; |
| 787 | if (nvec > XFS_TRANS_LOGVEC_COUNT) { | 756 | if (nvec > XFS_TRANS_LOGVEC_COUNT) { |
diff --git a/fs/xfs/xfs_vfsops.c b/fs/xfs/xfs_vfsops.c index dd419e1d71ba..94f0858699b5 100644 --- a/fs/xfs/xfs_vfsops.c +++ b/fs/xfs/xfs_vfsops.c | |||
| @@ -214,9 +214,7 @@ xfs_start_flags( | |||
| 214 | } | 214 | } |
| 215 | 215 | ||
| 216 | if (ap->logbufs != -1 && | 216 | if (ap->logbufs != -1 && |
| 217 | #if defined(DEBUG) || defined(XLOG_NOLOG) | ||
| 218 | ap->logbufs != 0 && | 217 | ap->logbufs != 0 && |
| 219 | #endif | ||
| 220 | (ap->logbufs < XLOG_MIN_ICLOGS || | 218 | (ap->logbufs < XLOG_MIN_ICLOGS || |
| 221 | ap->logbufs > XLOG_MAX_ICLOGS)) { | 219 | ap->logbufs > XLOG_MAX_ICLOGS)) { |
| 222 | cmn_err(CE_WARN, | 220 | cmn_err(CE_WARN, |
| @@ -226,6 +224,7 @@ xfs_start_flags( | |||
| 226 | } | 224 | } |
| 227 | mp->m_logbufs = ap->logbufs; | 225 | mp->m_logbufs = ap->logbufs; |
| 228 | if (ap->logbufsize != -1 && | 226 | if (ap->logbufsize != -1 && |
| 227 | ap->logbufsize != 0 && | ||
| 229 | ap->logbufsize != 16 * 1024 && | 228 | ap->logbufsize != 16 * 1024 && |
| 230 | ap->logbufsize != 32 * 1024 && | 229 | ap->logbufsize != 32 * 1024 && |
| 231 | ap->logbufsize != 64 * 1024 && | 230 | ap->logbufsize != 64 * 1024 && |
| @@ -1910,13 +1909,14 @@ xfs_showargs( | |||
| 1910 | seq_printf(m, "," MNTOPT_IHASHSIZE "=%d", mp->m_ihsize); | 1909 | seq_printf(m, "," MNTOPT_IHASHSIZE "=%d", mp->m_ihsize); |
| 1911 | 1910 | ||
| 1912 | if (mp->m_flags & XFS_MOUNT_DFLT_IOSIZE) | 1911 | if (mp->m_flags & XFS_MOUNT_DFLT_IOSIZE) |
| 1913 | seq_printf(m, "," MNTOPT_ALLOCSIZE "=%d", 1<<mp->m_writeio_log); | 1912 | seq_printf(m, "," MNTOPT_ALLOCSIZE "=%dk", |
| 1913 | (int)(1 << mp->m_writeio_log) >> 10); | ||
| 1914 | 1914 | ||
| 1915 | if (mp->m_logbufs > 0) | 1915 | if (mp->m_logbufs > 0) |
| 1916 | seq_printf(m, "," MNTOPT_LOGBUFS "=%d", mp->m_logbufs); | 1916 | seq_printf(m, "," MNTOPT_LOGBUFS "=%d", mp->m_logbufs); |
| 1917 | 1917 | ||
| 1918 | if (mp->m_logbsize > 0) | 1918 | if (mp->m_logbsize > 0) |
| 1919 | seq_printf(m, "," MNTOPT_LOGBSIZE "=%d", mp->m_logbsize); | 1919 | seq_printf(m, "," MNTOPT_LOGBSIZE "=%dk", mp->m_logbsize >> 10); |
| 1920 | 1920 | ||
| 1921 | if (mp->m_logname) | 1921 | if (mp->m_logname) |
| 1922 | seq_printf(m, "," MNTOPT_LOGDEV "=%s", mp->m_logname); | 1922 | seq_printf(m, "," MNTOPT_LOGDEV "=%s", mp->m_logname); |
