From 73b31e96a43d1a6b9bd334457696d538cf2e3f09 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Mon, 9 Jan 2012 11:30:39 +0000 Subject: blk plugin: replace BLK_TC_BARRIER with BLK_TC_FLUSH/BLK_TC_FUA The BLK_TC_BARRIER flag was dropped in Linux commit c09c47caedc in August 2011. The blk plugin fails to build against recent kernel headers. Since no flag bits were left, the new BLK_TC_FLUSH flag reused the BLK_TC_BARRIER bit. The new BLK_TC_FUA flag was also added. This patch updates fill_rwbs() to reflect the new BLK_TC_FLUSH/BLK_TC_FUA flags. This allows plugin_blk.c to build successfully on recent kernels. Most of the patch deals with detecting old vs new kernel headers so we can build successfully on both. (Namhyung Kim recommended using the makefile check used by perf and other tools) Link: http://lkml.kernel.org/r/1326108639-13904-1-git-send-email-stefanha@linux.vnet.ibm.com Signed-off-by: Stefan Hajnoczi Cc: Namhyung Kim Signed-off-by: Steven Rostedt --- Makefile | 14 +++++++++++--- plugin_blk.c | 11 +++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index c1fa9067..f430c849 100644 --- a/Makefile +++ b/Makefile @@ -89,12 +89,20 @@ endif # $(call test-build, snippet, ret) -> ret if snippet compiles # -> empty otherwise -test-build = $(if $(shell $(CC) -o /dev/null -c -x c - > /dev/null 2>&1 \ - <<<'$1' && echo y), $2) +test-build = $(if $(shell sh -c 'echo "$(1)" | \ + $(CC) -o /dev/null -c -x c - > /dev/null 2>&1 && echo y'), $2) # have udis86 disassembler library? udis86-flags := $(call test-build,\#include ,-DHAVE_UDIS86 -ludis86) +define BLK_TC_FLUSH_SOURCE +#include +int main(void) { return BLK_TC_FLUSH; } +endef + +# have flush/fua block layer instead of barriers? +blk-flags := $(call test-build,$(BLK_TC_FLUSH_SOURCE),-DHAVE_BLK_TC_FLUSH) + ifeq ("$(origin O)", "command line") BUILD_OUTPUT := $(O) endif @@ -222,7 +230,7 @@ endif # Append required CFLAGS override CFLAGS += $(CONFIG_FLAGS) $(INCLUDES) $(PLUGIN_DIR_SQ) -override CFLAGS += $(udis86-flags) +override CFLAGS += $(udis86-flags) $(blk-flags) ifeq ($(VERBOSE),1) Q = diff --git a/plugin_blk.c b/plugin_blk.c index 9327b171..c0ecef92 100644 --- a/plugin_blk.c +++ b/plugin_blk.c @@ -54,6 +54,11 @@ static void fill_rwbs(char *rwbs, int action, unsigned int bytes) goto out; } +#if defined(HAVE_BLK_TC_FLUSH) + if (tc & BLK_TC_FLUSH) + rwbs[i++] = 'F'; +#endif + if (tc & BLK_TC_DISCARD) rwbs[i++] = 'D'; else if (tc & BLK_TC_WRITE) @@ -63,10 +68,16 @@ static void fill_rwbs(char *rwbs, int action, unsigned int bytes) else rwbs[i++] = 'N'; +#if defined(HAVE_BLK_TC_FLUSH) + if (tc & BLK_TC_FUA) + rwbs[i++] = 'F'; +#endif if (tc & BLK_TC_AHEAD) rwbs[i++] = 'A'; +#if !defined(HAVE_BLK_TC_FLUSH) if (tc & BLK_TC_BARRIER) rwbs[i++] = 'B'; +#endif if (tc & BLK_TC_SYNC) rwbs[i++] = 'S'; if (tc & BLK_TC_META) -- cgit v1.2.3