From: Sage Weil Date: Thu, 11 Dec 2014 21:46:47 +0000 (-0800) Subject: common/blkdev: add simple sandboxing function for testing X-Git-Tag: v0.90~2^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5e454a8eb3a392a728ee51e974d9def989e2b375;p=ceph.git common/blkdev: add simple sandboxing function for testing Signed-off-by: Sage Weil --- diff --git a/src/common/blkdev.cc b/src/common/blkdev.cc index 7c838341360d..70dde42010fb 100644 --- a/src/common/blkdev.cc +++ b/src/common/blkdev.cc @@ -12,6 +12,16 @@ #ifdef __linux__ #include +static const char *sandbox_dir = ""; + +void set_block_device_sandbox_dir(const char *dir) +{ + if (dir) + sandbox_dir = dir; + else + sandbox_dir = ""; +} + int get_block_device_size(int fd, int64_t *psize) { #ifdef BLKGETSIZE64 @@ -52,7 +62,7 @@ int get_block_device_base(const char *dev, char *out, size_t out_len) if (*p == '/') *p = '!'; - snprintf(fn, sizeof(fn), "/sys/block/%s", devname); + snprintf(fn, sizeof(fn), "%s/sys/block/%s", sandbox_dir, devname); if (stat(fn, &st) == 0) { if (strlen(devname) + 1 > out_len) { return -ERANGE; @@ -61,7 +71,8 @@ int get_block_device_base(const char *dev, char *out, size_t out_len) return 0; } - dir = opendir("/sys/block"); + snprintf(fn, sizeof(fn), "%s/sys/block", sandbox_dir); + dir = opendir(fn); if (!dir) return -errno; @@ -75,7 +86,8 @@ int get_block_device_base(const char *dev, char *out, size_t out_len) } if (de->d_name[0] == '.') continue; - snprintf(fn, sizeof(fn), "/sys/block/%s/%s", de->d_name, devname); + snprintf(fn, sizeof(fn), "%s/sys/block/%s/%s", sandbox_dir, de->d_name, + devname); if (stat(fn, &st) == 0) { // match! @@ -111,7 +123,7 @@ int64_t get_block_device_int_property(const char *devname, const char *property) return r; snprintf(filename, sizeof(filename), - "/sys/block/%s/queue/discard_granularity", basename); + "%s/sys/block/%s/queue/discard_granularity", sandbox_dir, basename); FILE *fp = fopen(filename, "r"); if (fp == NULL) { diff --git a/src/common/blkdev.h b/src/common/blkdev.h index 3f1277800151..5c63ac97fdd2 100644 --- a/src/common/blkdev.h +++ b/src/common/blkdev.h @@ -1,6 +1,9 @@ #ifndef __CEPH_COMMON_BLKDEV_H #define __CEPH_COMMON_BLKDEV_H +/* for testing purposes */ +extern void set_block_device_sandbox_dir(const char *dir); + extern int get_block_device_base(const char *dev, char *out, size_t out_len); extern int get_block_device_size(int fd, int64_t *psize); extern int64_t get_block_device_int_property(const char *devname, const char *property);