diff mbox series

[blktests,v2] nbd/003:add mount and clear_sock test for nbd

Message ID 1568702991-69027-1-git-send-email-sunke32@huawei.com (mailing list archive)
State New, archived
Headers show
Series [blktests,v2] nbd/003:add mount and clear_sock test for nbd | expand

Commit Message

Sun Ke Sept. 17, 2019, 6:49 a.m. UTC
Add the test case to check nbd devices.This test case catches regressions
fixed by commit 92b5c8f0063e4 "nbd: replace kill_bdev() with
__invalidate_device() again".

Establish the nbd connection.Run two processes.One do mount and umount,
anther one do clear_sock ioctl.

Signed-off-by: Sun Ke <sunke32@huawei.com>
---
 src/Makefile           |  3 ++-
 src/mount_clear_sock.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/nbd/003          | 66 ++++++++++++++++++++++++++++++++++++++++++++++++
 tests/nbd/003.out      |  1 +
 4 files changed, 137 insertions(+), 1 deletion(-)
 create mode 100644 src/mount_clear_sock.c
 create mode 100644 tests/nbd/003
 create mode 100644 tests/nbd/003.out

Comments

Sun Ke Sept. 24, 2019, 7:51 a.m. UTC | #1
ping
在 2019/9/17 14:49, Sun Ke 写道:
Sun Ke Oct. 8, 2019, 1:29 a.m. UTC | #2
在 2019/9/17 14:49, Sun Ke 写道:
ping
Omar Sandoval Oct. 15, 2019, 11:43 p.m. UTC | #3
On Tue, Sep 17, 2019 at 02:49:51PM +0800, Sun Ke wrote:
> Add the test case to check nbd devices.This test case catches regressions
> fixed by commit 92b5c8f0063e4 "nbd: replace kill_bdev() with
> __invalidate_device() again".
> 
> Establish the nbd connection.Run two processes.One do mount and umount,
> anther one do clear_sock ioctl.
> 
> Signed-off-by: Sun Ke <sunke32@huawei.com>
> ---
>  src/Makefile           |  3 ++-
>  src/mount_clear_sock.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++
>  tests/nbd/003          | 66 ++++++++++++++++++++++++++++++++++++++++++++++++
>  tests/nbd/003.out      |  1 +
>  4 files changed, 137 insertions(+), 1 deletion(-)
>  create mode 100644 src/mount_clear_sock.c
>  create mode 100644 tests/nbd/003
>  create mode 100644 tests/nbd/003.out
> 
> diff --git a/src/Makefile b/src/Makefile
> index 917d6f4..acd7327 100644
> --- a/src/Makefile
> +++ b/src/Makefile
> @@ -10,7 +10,8 @@ C_TARGETS := \
>  	sg/syzkaller1 \
>  	nbdsetsize \
>  	loop_change_fd \
> -	zbdioctl
> +	zbdioctl \
> +	mount_clear_sock
>  
>  CXX_TARGETS := \
>  	discontiguous-io
> diff --git a/src/mount_clear_sock.c b/src/mount_clear_sock.c
> new file mode 100644
> index 0000000..f6eef5a
> --- /dev/null
> +++ b/src/mount_clear_sock.c
> @@ -0,0 +1,68 @@
> +// SPDX-License-Identifier: GPL-3.0+
> +// Copyright (C) 2019 Sun Ke
> +
> +#include <stdio.h>
> +#include <stdlib.h>
> +
> +#include <sys/types.h>
> +#include <sys/stat.h>
> +#include <fcntl.h>
> +
> +#include <linux/nbd.h>
> +#include <assert.h>
> +#include <sys/wait.h>
> +#include <unistd.h>
> +#include <string.h>
> +#include <sys/ioctl.h>
> +#include <sys/mount.h>
> +#include <linux/fs.h>
> +
> +void clear_sock(int fd)
> +{
> +	int err;
> +
> +	err = ioctl(fd, NBD_CLEAR_SOCK, 0);
> +	if (err) {
> +		perror("ioctl");
> +	}
> +}
> +
> +void mount_nbd(char *dev, char *mp, char *fs)
> +{
> +	mount(dev, mp, fs, MS_NOSUID | MS_SYNCHRONOUS, 0);
> +	umount(mp);
> +}
> +
> +int main(int argc, char **argv)
> +{
> +	if (argc != 4) {
> +		fprintf(stderr, "usage: $0 MOUNTPOINT DEV FS");
> +		return EXIT_FAILURE;
> +	}
> +
> +	char *mp = argv[1];
> +	char *dev = argv[2];
> +	char *fs = argv[3];
> +	
> +	static int fd = -1;
> +
> +	fd = open(dev, O_RDWR);
> +	if (fd < 0 ) {
> +		perror("open");
> +	}
> +
> +	if (fork() == 0) {
> +		mount_nbd(dev, mp, fs);
> +		exit(0);
> +	}
> +	if (fork() == 0) {
> +		clear_sock(fd);
> +		exit(0);
> +	}
> +	while(wait(NULL) > 0)
> +		continue;
> +	
> +	close(fd);
> +
> +	return 0;
> +}
> diff --git a/tests/nbd/003 b/tests/nbd/003
> new file mode 100644
> index 0000000..45093aa
> --- /dev/null
> +++ b/tests/nbd/003
> @@ -0,0 +1,66 @@
> +#!/bin/bash
> +
> +# SPDX-License-Identifier: GPL-3.0+
> +# Copyright (C) 2019 Sun Ke
> +#
> +# Test nbd device resizing. Regression test for patch 
> +#
> +# 2b5c8f0063e4 ("nbd: replace kill_bdev() with __invalidate_device() again")
> +
> +
> +DESCRIPTION="resize a connected nbd device"
> +QUICK=1
> +
> +fs_type=ext4
> +disk_capacity=256M
> +run_cnt=1
> +
> +requires() {
> +	_have_nbd && _have_src_program mount_clear_sock
> +}
> +
> +_start_nbd_mount_server() {
> +
> +	fallocate -l $1 "${TMPDIR}/mnt_$i"
> +
> +	if [[ "$2"x = "ext4"x ]]; then
> +		mkfs.ext4 "${TMPDIR}/mnt_$i" >> "$FULL" 2>&1
> +	else
> +		mkdosfs "${TMPDIR}/mnt_$i" >> "$FULL" 2>&1
> +	fi
> +	nbd-server 800$i "${TMPDIR}/mnt_$i" >> "$FULL" 2>&1
> +
> +	mkdir -p "${TMPDIR}/$i"
> +}
> +
> +_stop_nbd_mount_server() {
> +	pkill -9 -f 800$i
> +	rm -f "${TMPDIR}/mnt_$i"
> +	rm -rf "${TMPDIR}/$i"
> +}
> +
> +test() {
> +	echo "Running ${TEST_NAME}"
> +	for ((i = 0; i < 15; i++))
> +	do
> +		_start_nbd_mount_server  $disk_capacity $fs_type
> +		nbd-client localhost 800$i /dev/nbd$i >> "$FULL" 2>&1
> +		if [[ "$?" -ne "0" ]]; then
> +			echo "nbd$i connnect failed" 
> +		fi 
> +	done
> +
> +	for ((j = 0; j < $run_cnt; j++))
> +	do
> +		for ((i = 0; i < 15; i++))
> +		do
> +			src/mount_clear_sock  "${TMPDIR}/$i" /dev/nbd$i $fs_type
> +		done
> +	done	
> +
> +	for ((i = 0; i < 15; i++))
> +	do
> +		nbd-client -d /dev/nbd$i
> +		_stop_nbd_mount_server
> +	done
> +}

Sorry for the delay, it's been a busy few weeks.

I'm still not seeing why it's necessary to create 15 connections. You
create 15 devices one by one, run the test on each one, one by one, and
tear them down, one by one. This is not parallelized, so why is it
faster to have 15 devices than just one?
diff mbox series

Patch

diff --git a/src/Makefile b/src/Makefile
index 917d6f4..acd7327 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -10,7 +10,8 @@  C_TARGETS := \
 	sg/syzkaller1 \
 	nbdsetsize \
 	loop_change_fd \
-	zbdioctl
+	zbdioctl \
+	mount_clear_sock
 
 CXX_TARGETS := \
 	discontiguous-io
diff --git a/src/mount_clear_sock.c b/src/mount_clear_sock.c
new file mode 100644
index 0000000..f6eef5a
--- /dev/null
+++ b/src/mount_clear_sock.c
@@ -0,0 +1,68 @@ 
+// SPDX-License-Identifier: GPL-3.0+
+// Copyright (C) 2019 Sun Ke
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+#include <linux/nbd.h>
+#include <assert.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/ioctl.h>
+#include <sys/mount.h>
+#include <linux/fs.h>
+
+void clear_sock(int fd)
+{
+	int err;
+
+	err = ioctl(fd, NBD_CLEAR_SOCK, 0);
+	if (err) {
+		perror("ioctl");
+	}
+}
+
+void mount_nbd(char *dev, char *mp, char *fs)
+{
+	mount(dev, mp, fs, MS_NOSUID | MS_SYNCHRONOUS, 0);
+	umount(mp);
+}
+
+int main(int argc, char **argv)
+{
+	if (argc != 4) {
+		fprintf(stderr, "usage: $0 MOUNTPOINT DEV FS");
+		return EXIT_FAILURE;
+	}
+
+	char *mp = argv[1];
+	char *dev = argv[2];
+	char *fs = argv[3];
+	
+	static int fd = -1;
+
+	fd = open(dev, O_RDWR);
+	if (fd < 0 ) {
+		perror("open");
+	}
+
+	if (fork() == 0) {
+		mount_nbd(dev, mp, fs);
+		exit(0);
+	}
+	if (fork() == 0) {
+		clear_sock(fd);
+		exit(0);
+	}
+	while(wait(NULL) > 0)
+		continue;
+	
+	close(fd);
+
+	return 0;
+}
diff --git a/tests/nbd/003 b/tests/nbd/003
new file mode 100644
index 0000000..45093aa
--- /dev/null
+++ b/tests/nbd/003
@@ -0,0 +1,66 @@ 
+#!/bin/bash
+
+# SPDX-License-Identifier: GPL-3.0+
+# Copyright (C) 2019 Sun Ke
+#
+# Test nbd device resizing. Regression test for patch 
+#
+# 2b5c8f0063e4 ("nbd: replace kill_bdev() with __invalidate_device() again")
+
+
+DESCRIPTION="resize a connected nbd device"
+QUICK=1
+
+fs_type=ext4
+disk_capacity=256M
+run_cnt=1
+
+requires() {
+	_have_nbd && _have_src_program mount_clear_sock
+}
+
+_start_nbd_mount_server() {
+
+	fallocate -l $1 "${TMPDIR}/mnt_$i"
+
+	if [[ "$2"x = "ext4"x ]]; then
+		mkfs.ext4 "${TMPDIR}/mnt_$i" >> "$FULL" 2>&1
+	else
+		mkdosfs "${TMPDIR}/mnt_$i" >> "$FULL" 2>&1
+	fi
+	nbd-server 800$i "${TMPDIR}/mnt_$i" >> "$FULL" 2>&1
+
+	mkdir -p "${TMPDIR}/$i"
+}
+
+_stop_nbd_mount_server() {
+	pkill -9 -f 800$i
+	rm -f "${TMPDIR}/mnt_$i"
+	rm -rf "${TMPDIR}/$i"
+}
+
+test() {
+	echo "Running ${TEST_NAME}"
+	for ((i = 0; i < 15; i++))
+	do
+		_start_nbd_mount_server  $disk_capacity $fs_type
+		nbd-client localhost 800$i /dev/nbd$i >> "$FULL" 2>&1
+		if [[ "$?" -ne "0" ]]; then
+			echo "nbd$i connnect failed" 
+		fi 
+	done
+
+	for ((j = 0; j < $run_cnt; j++))
+	do
+		for ((i = 0; i < 15; i++))
+		do
+			src/mount_clear_sock  "${TMPDIR}/$i" /dev/nbd$i $fs_type
+		done
+	done	
+
+	for ((i = 0; i < 15; i++))
+	do
+		nbd-client -d /dev/nbd$i
+		_stop_nbd_mount_server
+	done
+}
diff --git a/tests/nbd/003.out b/tests/nbd/003.out
new file mode 100644
index 0000000..aa340db
--- /dev/null
+++ b/tests/nbd/003.out
@@ -0,0 +1 @@ 
+Running nbd/003