#!/bin/bash # -*- coding: utf-8 -*- # # nacl_build.sh -- NaCl library build script # # Copyright (C) 2011 Daniel Borkmann # Copyright (C) 2009-2011 Emmanuel Roullit # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. cc="gcc" nacl_dir="/tmp" nacl_version="nacl-20110221" nacl_suffix="tar.bz2" nacl_base_url="http://hyperelliptic.org/nacl" nacl_path="$nacl_dir/$nacl_version.$nacl_suffix" nacl_build_dir="$1" if test -z "$nacl_build_dir"; then echo "Please input the path where NaCl should be build" exit 1 fi if ! test -d "$nacl_build_dir"; then mkdir "$nacl_build_dir" fi wget -O "$nacl_path" "$nacl_base_url/$nacl_version.$nacl_suffix" tar xjf "$nacl_path" -C "$nacl_build_dir" $cc -Wall -O2 ./abiname.c -o ./abiname arch="`./abiname`" shorthostname=$(hostname | sed 's/\..*//' | tr -cd '[a-z][A-Z][0-9]') echo "Building NaCl for arch $arch on host $shorthostname (grab a coffee, this takes a while) ..." cd "$nacl_build_dir"/"$nacl_version" ./do cd - > /dev/null nacl_lib_path="$nacl_build_dir/$nacl_version/build/$shorthostname/lib/$arch" nacl_include_path="$nacl_build_dir/$nacl_version/build/$shorthostname/include/$arch" echo "NaCl lib path $nacl_lib_path" echo "NaCl include path $nacl_include_path" ./nacl_path.sh "$nacl_include_path" "$nacl_lib_path" echo "Done!" git/'>summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
os.cn>
2016-10-24 16:15:59 +0800
committerShaohua Li <shli@fb.com>2016-10-24 15:28:18 -0700
commit56056c2e7d58ee705755efbe780aefff987a1dc8 (patch)
treedcd22f765aa0a73e947f5c550c5b6e116d5304f7
parent28cd88e2b4c54a466dcae7eea1efac766d42386b (diff)
md/raid5: write an empty meta-block when creating log super-block
If superblock points to an invalid meta block, r5l_load_log will set create_super with true and create an new superblock, this runtime path would always happen if we do no writing I/O to this array since it was created. Writing an empty meta block could avoid this unnecessary action at the first time we created log superblock. Another reason is for the corretness of log recovery. Currently we have bellow code to guarantee log revocery to be correct. if (ctx.seq > log->last_cp_seq + 1) { int ret; ret = r5l_log_write_empty_meta_block(log, ctx.pos, ctx.seq + 10); if (ret) return ret; log->seq = ctx.seq + 11; log->log_start = r5l_ring_add(log, ctx.pos, BLOCK_SECTORS); r5l_write_super(log, ctx.pos); } else { log->log_start = ctx.pos; log->seq = ctx.seq; } If we just created a array with a journal device, log->log_start and log->last_checkpoint should all be 0, then we write three meta block which are valid except mid one and supposed crash happened. The ctx.seq would equal to log->last_cp_seq + 1 and log->log_start would be set to position of mid invalid meta block after we did a recovery, this will lead to problems which could be avoided with this patch. Signed-off-by: Zhengyuan Liu <liuzhengyuan@kylinos.cn> Signed-off-by: Shaohua Li <shli@fb.com>