##/bin/sh # # Copyright (c) 2000-2002 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 # 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. # # 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/ # # # common routines for log testing # Created by dxm@sgi.com & tes@sgi.com # fulldir=$seq.fulldir rm -rf $fulldir _cleanup_logfiles() { if [ $status -eq 0 ]; then # don't keep these files around unless something went wrong rm -rf $fulldir fi } _full() { echo "" >>$seq.full echo "*** $* ***" >>$seq.full echo "" >>$seq.full } _echofull() { echo "" | tee -a $seq.full echo "*** $* ***" | tee -a $seq.full echo "" | tee -a $seq.full } # Handle the operations which get split over Log Record # boundaries. # Oper (379)..... flags: CONTINUE # ... # Oper (0)....... flags: WAS_CONT END # # or # # Oper (379)..... flags: none # ... # Oper (0)....... flags: none # _filter_opnum() { $AWK_PROG ' BEGIN { debug = 0 } /^Oper/ && debug { printf "line = %s\n", $0 } /^Oper/ { was_cont = 0 } /^Oper/ && /flags: CONTINUE/ { # this will be the first op of split region $9 = "none" # overwrite CONTINUE flags print print "Not printing rest" was_cont = 1 next } /^Oper/ && /flags: WAS_CONT END/ { # this will be the last op of split region # skip over was-continued op # we assume there can be only 1 was_cont = 1 next } (was_cont == 1) { # skip over any continued op stuff next } {print} ' } # # Filter out things that can change # We have complexities which change when log is sync'ed at different # times. # Example1: DATA FORK EXTENTS # These will not show up if inode is sync'ed sooner # /DATA FORK EXTENTS/d; # /INODE:/s/flags:0x5/flags:0x1/g; # define XFS_ILOG_CORE 0x001 /* log standard inode fields */ # define XFS_ILOG_DEXT 0x004 /* log i_df.if_extents */ # # _filter_logprint() { _fix_malloc |\ sed ' s/data device: 0x[0-9a-f][0-9a-f]*/data device: /; s/log device: 0x[0-9a-f][0-9a-f]*/log device: /; s/log file: \".*\"/log device: /; s/daddr: [0-9][0-9]*/daddr: /; s/length: [0-9][0-9]*/length: /; s/length: [0-9][0-9]*/length: /; s/^cycle num overwrites: .*$/cycle num overwrites: /; s/tid: [0-9a-f][0-9a-f]*/tid: /; s/tid:0x[0-9a-f][0-9a-f]*/tid:/; s/q:0x[0-9a-f][0-9a-f]*/q:/; s/a:0x[0-9a-f][0-9a-f]*/a:/g; s/blkno:0x[0-9a-f][0-9a-f]*/blkno:/g; s/blkno: [0-9][0-9]* (0x[0-9a-f]*)/blkno: ()/g; s/blkno: [0-9][0-9]*/blkno: /g; s/boff: [0-9][0-9]*/boff: /g; s/len: *[0-9][0-9]*/len:/g; /zeroed blocks/s/[0-9][0-9]*//g; /cleared blocks/d; /log tail/s/[0-9][0-9]*//g; s/atime:[0-9a-fx]* *mtime:[0-9a-fx]* *ctime:[0-9a-fx]*/atime: