@@ -18,7 +18,7 @@ TEST_GEN_PROGS_EXTENDED = kublk
include ../lib.mk
-$(TEST_GEN_PROGS_EXTENDED): kublk.c null.c file_backed.c
+$(TEST_GEN_PROGS_EXTENDED): kublk.c null.c file_backed.c common.c
check:
shellcheck -x -f gcc *.sh
new file mode 100644
@@ -0,0 +1,55 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include "kublk.h"
+
+void backing_file_tgt_deinit(struct ublk_dev *dev)
+{
+ int i;
+
+ for (i = 1; i < dev->nr_fds; i++) {
+ fsync(dev->fds[i]);
+ close(dev->fds[i]);
+ }
+}
+
+int backing_file_tgt_init(struct ublk_dev *dev)
+{
+ int fd, i;
+
+ assert(dev->nr_fds == 1);
+
+ for (i = 0; i < dev->tgt.nr_backing_files; i++) {
+ char *file = dev->tgt.backing_file[i];
+ unsigned long bytes;
+ struct stat st;
+
+ ublk_dbg(UBLK_DBG_DEV, "%s: file %d: %s\n", __func__, i, file);
+
+ fd = open(file, O_RDWR | O_DIRECT);
+ if (fd < 0) {
+ ublk_err("%s: backing file %s can't be opened: %s\n",
+ __func__, file, strerror(errno));
+ return -EBADF;
+ }
+
+ if (fstat(fd, &st) < 0) {
+ close(fd);
+ return -EBADF;
+ }
+
+ if (S_ISREG(st.st_mode))
+ bytes = st.st_size;
+ else if (S_ISBLK(st.st_mode)) {
+ if (ioctl(fd, BLKGETSIZE64, &bytes) != 0)
+ return -1;
+ } else {
+ return -EINVAL;
+ }
+
+ dev->tgt.backing_file_size[i] = bytes;
+ dev->fds[dev->nr_fds] = fd;
+ dev->nr_fds += 1;
+ }
+
+ return 0;
+}
@@ -2,58 +2,6 @@
#include "kublk.h"
-static void backing_file_tgt_deinit(struct ublk_dev *dev)
-{
- int i;
-
- for (i = 1; i < dev->nr_fds; i++) {
- fsync(dev->fds[i]);
- close(dev->fds[i]);
- }
-}
-
-static int backing_file_tgt_init(struct ublk_dev *dev)
-{
- int fd, i;
-
- assert(dev->nr_fds == 1);
-
- for (i = 0; i < dev->tgt.nr_backing_files; i++) {
- char *file = dev->tgt.backing_file[i];
- unsigned long bytes;
- struct stat st;
-
- ublk_dbg(UBLK_DBG_DEV, "%s: file %d: %s\n", __func__, i, file);
-
- fd = open(file, O_RDWR | O_DIRECT);
- if (fd < 0) {
- ublk_err("%s: backing file %s can't be opened: %s\n",
- __func__, file, strerror(errno));
- return -EBADF;
- }
-
- if (fstat(fd, &st) < 0) {
- close(fd);
- return -EBADF;
- }
-
- if (S_ISREG(st.st_mode))
- bytes = st.st_size;
- else if (S_ISBLK(st.st_mode)) {
- if (ioctl(fd, BLKGETSIZE64, &bytes) != 0)
- return -1;
- } else {
- return -EINVAL;
- }
-
- dev->tgt.backing_file_size[i] = bytes;
- dev->fds[dev->nr_fds] = fd;
- dev->nr_fds += 1;
- }
-
- return 0;
-}
-
static enum io_uring_op ublk_to_uring_op(const struct ublksrv_io_desc *iod, int zc)
{
unsigned ublk_op = ublksrv_get_op(iod);
@@ -320,4 +320,6 @@ static inline int ublk_queue_use_zc(const struct ublk_queue *q)
extern const struct ublk_tgt_ops null_tgt_ops;
extern const struct ublk_tgt_ops loop_tgt_ops;
+void backing_file_tgt_deinit(struct ublk_dev *dev);
+int backing_file_tgt_init(struct ublk_dev *dev);
#endif
Move two functions for initializing & de-initializing backing file into common.c. Also move one common helper into kublk.h. Prepare for supporting ublk-stripe. Signed-off-by: Ming Lei <ming.lei@redhat.com> --- tools/testing/selftests/ublk/Makefile | 2 +- tools/testing/selftests/ublk/common.c | 55 ++++++++++++++++++++++ tools/testing/selftests/ublk/file_backed.c | 52 -------------------- tools/testing/selftests/ublk/kublk.h | 2 + 4 files changed, 58 insertions(+), 53 deletions(-) create mode 100644 tools/testing/selftests/ublk/common.c