From c1e6adc72c86ba566e6117b61bc7e6581c4518f1 Mon Sep 17 00:00:00 2001 From: Joe Thornber Date: Wed, 13 Jun 2018 09:33:25 +0100 Subject: [PATCH 1/2] [build] support separate build directories --- Makefile.in | 5 +++++ unit-tests/Makefile.in | 3 +++ 2 files changed, 8 insertions(+) diff --git a/Makefile.in b/Makefile.in index 34b7fe4..c0b990a 100644 --- a/Makefile.in +++ b/Makefile.in @@ -202,6 +202,7 @@ endif %.o: %.cc @echo " [CXX] $<" + @mkdir -p $(dir $@) $(V) $(CXX) -c $(INCLUDES) $(CXXFLAGS) -o $@ $< @echo " [DEP] $<" $(V) $(CXX) -MM -MT $(subst .cc,.o,$<) $(INCLUDES) $(TEST_INCLUDES) $(CXXFLAGS) $< > $*.$$$$; \ @@ -210,6 +211,7 @@ endif %.o: %.c @echo " [CXX] $<" + @mkdir -p $(dir $@) $(V) $(CC) -c $(INCLUDES) $(CFLAGS) -o $@ $< @echo " [DEP] $<" $(V) $(CC) -MM -MT $(subst .cc,.o,$<) $(INCLUDES) $(TEST_INCLUDES) $(CFLAGS) $< > $*.$$$$; \ @@ -218,16 +220,19 @@ endif %.8: %.txt bin/txt2man @echo " [txt2man] $<" + @mkdir -p $(dir $@) $(V) bin/txt2man -p -t $(basename $(notdir $<)) $< > $@ #---------------------------------------------------------------- lib/libpdata.a: $(OBJECTS) $(EMITTERS) @echo " [AR] $<" + @mkdir -p $(dir $@) $(V)ar -rv $@ $(OBJECTS) $(EMITTERS) > /dev/null 2>&1 bin/pdata_tools: $(OBJECTS) $(EMITTERS) @echo " [LD] $@" + @mkdir -p $(dir $@) $(V) $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $+ $(LIBS) $(CXXLIB) #---------------------------------------------------------------- diff --git a/unit-tests/Makefile.in b/unit-tests/Makefile.in index f09294e..46bc347 100644 --- a/unit-tests/Makefile.in +++ b/unit-tests/Makefile.in @@ -35,6 +35,7 @@ GMOCK_DEPS=\ lib/libgmock.a: $(GMOCK_DEPS) @echo " [CXX] gtest" + @mkdir -p lib $(V)g++ $(GMOCK_INCLUDES) -I$(GMOCK_DIR)/googletest -c $(GMOCK_DIR)/googletest/src/gtest-all.cc @echo " [CXX] gmock" $(V)g++ $(GMOCK_INCLUDES) -I$(GMOCK_DIR)/googlemock -c $(GMOCK_DIR)/googlemock/src/gmock-all.cc @@ -78,6 +79,7 @@ TEST_OBJECTS=$(subst .cc,.gmo,$(TEST_SOURCE)) %.gmo: %.cc @echo " [CXX] $<" + @mkdir -p $(dir $@) $(V) $(CXX) -c $(TEST_INCLUDES) $(CPPFLAGS) $(GMOCK_INCLUDES) $(CXXFLAGS) $(GMOCK_FLAGS) -o $@ $< @echo " [DEP] $<" $(V) $(CXX) -MM -MT $(subst .cc,.o,$<) $(TEST_INCLUDES) $(CPPFLAGS) $(GMOCK_INCLUDES) $(CXXFLAGS) $(GMOCK_FLAGS) $< > $*.$$$$; \ @@ -86,6 +88,7 @@ TEST_OBJECTS=$(subst .cc,.gmo,$(TEST_SOURCE)) unit-tests/unit_tests: $(TEST_OBJECTS) lib/libgmock.a lib/libpdata.a @echo " [LD] $<" + @mkdir -p $(dir $@) $(V)g++ $(CXXFLAGS) $(LDFLAGS) -o $@ $(TEST_OBJECTS) $(LIBS) $(GMOCK_LIBS) $(LIBEXPAT) .PHONY: unit-test From 498057d00ead9c14dceb866a528e81edc7d6f781 Mon Sep 17 00:00:00 2001 From: Joe Thornber Date: Thu, 21 Jun 2018 10:06:01 +0100 Subject: [PATCH 2/2] ft-lib: add discard() --- ft-lib/dm-ioctl.c | 22 ++++++++++++++++++++-- functional-tests/device-mapper/ioctl.scm | 11 +++++++++-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/ft-lib/dm-ioctl.c b/ft-lib/dm-ioctl.c index 89d79be..b1792c6 100644 --- a/ft-lib/dm-ioctl.c +++ b/ft-lib/dm-ioctl.c @@ -487,8 +487,6 @@ int dm_load(struct dm_interface *dmi, const char *name, return r; } -//---------------------------------------------------------------- -// returns false if control buffer too small. static bool get_status(struct dm_interface *dmi, struct dm_ioctl *ctl, const char *name, unsigned flags, int *result) @@ -611,4 +609,24 @@ int get_dev_size(const char *path, uint64_t *sectors) return r; } +int discard(const char *path, uint64_t sector_b, uint64_t sector_e) +{ + int r, fd; + uint64_t payload[2]; + + fd = open(path, O_RDWR); + if (fd < 0) { + fprintf(stderr, "couldn't open %s", path); + return -EINVAL; + } + + payload[0] = sector_b; + payload[1] = sector_e; + + r = ioctl(fd, BLKDISCARD, payload); + close(fd); + + return r; +} + //---------------------------------------------------------------- diff --git a/functional-tests/device-mapper/ioctl.scm b/functional-tests/device-mapper/ioctl.scm index 529930a..5edb889 100644 --- a/functional-tests/device-mapper/ioctl.scm +++ b/functional-tests/device-mapper/ioctl.scm @@ -44,7 +44,8 @@ message - get-dev-size) + get-dev-size + discard) (import (chezscheme) (disk-units) @@ -393,4 +394,10 @@ (if (zero? r) (sectors result) (fail (fmt #f "get-dev-size failed: " r)))))) - ) + + (define (discard dev sb se) + (define c-discard + (foreign-procedure "discard" (string unsigned-64 unsigned-64) int)) + (unless (zero? (c-discard dev sb se)) + (fail (fmt #f "discard ioctl failed")))) +)