Linux-Block Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH blktests v2] nbd/003:add mount and clear_sock test for nbd
@ 2019-09-17  6:49 Sun Ke
  2019-09-24  7:51 ` sunke (E)
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Sun Ke @ 2019-09-17  6:49 UTC (permalink / raw)
  To: sunke32, osandov, linux-block

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
+}
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
-- 
2.13.6


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH blktests v2] nbd/003:add mount and clear_sock test for nbd
  2019-09-17  6:49 [PATCH blktests v2] nbd/003:add mount and clear_sock test for nbd Sun Ke
@ 2019-09-24  7:51 ` sunke (E)
  2019-10-08  1:29 ` sunke (E)
  2019-10-15 23:43 ` Omar Sandoval
  2 siblings, 0 replies; 4+ messages in thread
From: sunke (E) @ 2019-09-24  7:51 UTC (permalink / raw)
  To: osandov, linux-block


ping
ÔÚ 2019/9/17 14:49, Sun Ke дµÀ:



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH blktests v2] nbd/003:add mount and clear_sock test for nbd
  2019-09-17  6:49 [PATCH blktests v2] nbd/003:add mount and clear_sock test for nbd Sun Ke
  2019-09-24  7:51 ` sunke (E)
@ 2019-10-08  1:29 ` sunke (E)
  2019-10-15 23:43 ` Omar Sandoval
  2 siblings, 0 replies; 4+ messages in thread
From: sunke (E) @ 2019-10-08  1:29 UTC (permalink / raw)
  To: osandov, linux-block



ÔÚ 2019/9/17 14:49, Sun Ke дµÀ:
ping


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH blktests v2] nbd/003:add mount and clear_sock test for nbd
  2019-09-17  6:49 [PATCH blktests v2] nbd/003:add mount and clear_sock test for nbd Sun Ke
  2019-09-24  7:51 ` sunke (E)
  2019-10-08  1:29 ` sunke (E)
@ 2019-10-15 23:43 ` Omar Sandoval
  2 siblings, 0 replies; 4+ messages in thread
From: Omar Sandoval @ 2019-10-15 23:43 UTC (permalink / raw)
  To: Sun Ke; +Cc: osandov, linux-block

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?

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, back to index

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-17  6:49 [PATCH blktests v2] nbd/003:add mount and clear_sock test for nbd Sun Ke
2019-09-24  7:51 ` sunke (E)
2019-10-08  1:29 ` sunke (E)
2019-10-15 23:43 ` Omar Sandoval

Linux-Block Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-block/0 linux-block/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-block linux-block/ https://lore.kernel.org/linux-block \
		linux-block@vger.kernel.org linux-block@archiver.kernel.org
	public-inbox-index linux-block

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-block


AGPL code for this site: git clone https://public-inbox.org/ public-inbox