All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] vhost: Fix leaks on migration.
@ 2016-06-16  9:16 Ilya Maximets
  2016-06-16  9:16 ` [PATCH v2 1/2] vhost: fix leak of file descriptors Ilya Maximets
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Ilya Maximets @ 2016-06-16  9:16 UTC (permalink / raw)
  To: dev, Huawei Xie, Yuanhan Liu
  Cc: Dyasly Sergey, Heetae Ahn, Vladimir Shilkin, Victor Kaplansky,
	Ilya Maximets

v2:
	* rebased on top of dpdk-next-virtio/master

Ilya Maximets (2):
  vhost: fix leak of file descriptors.
  vhost: unmap log memory on cleanup.

 lib/librte_vhost/vhost-net.h                  |  1 +
 lib/librte_vhost/vhost_user/virtio-net-user.c | 16 ++++++++++++++--
 2 files changed, 15 insertions(+), 2 deletions(-)

-- 
2.7.4

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

* [PATCH v2 1/2] vhost: fix leak of file descriptors.
  2016-06-16  9:16 [PATCH v2 0/2] vhost: Fix leaks on migration Ilya Maximets
@ 2016-06-16  9:16 ` Ilya Maximets
  2016-06-16  9:16 ` [PATCH v2 2/2] vhost: unmap log memory on cleanup Ilya Maximets
  2016-06-20  5:53 ` [PATCH v2 0/2] vhost: Fix leaks on migration Yuanhan Liu
  2 siblings, 0 replies; 4+ messages in thread
From: Ilya Maximets @ 2016-06-16  9:16 UTC (permalink / raw)
  To: dev, Huawei Xie, Yuanhan Liu
  Cc: Dyasly Sergey, Heetae Ahn, Vladimir Shilkin, Victor Kaplansky,
	Ilya Maximets

While migration of vhost-user device QEMU allocates memfd
to store information about dirty pages and sends fd to
vhost-user process.

File descriptor for this memory should be closed to prevent
"Too many open files" error for vhost-user process after
some amount of migrations.

Ex.:
 # ls /proc/<ovs-vswitchd pid>/fd/ -alh
 total 0
 root qemu  .
 root qemu  ..
 root qemu  0 -> /dev/pts/0
 root qemu  1 -> pipe:[1804353]
 root qemu  10 -> socket:[1782240]
 root qemu  100 -> /memfd:vhost-log (deleted)
 root qemu  1000 -> /memfd:vhost-log (deleted)
 root qemu  1001 -> /memfd:vhost-log (deleted)
 root qemu  1004 -> /memfd:vhost-log (deleted)
 [...]
 root qemu  996 -> /memfd:vhost-log (deleted)
 root qemu  997 -> /memfd:vhost-log (deleted)

 ovs-vswitchd.log:
 |WARN|punix:ovs-vswitchd.ctl: accept failed: Too many open files

Fixes: 54f9e32305d4 ("vhost: handle dirty pages logging request")
Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
---
 lib/librte_vhost/vhost_user/virtio-net-user.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/librte_vhost/vhost_user/virtio-net-user.c b/lib/librte_vhost/vhost_user/virtio-net-user.c
index 64a6ec4..e6a2aed 100644
--- a/lib/librte_vhost/vhost_user/virtio-net-user.c
+++ b/lib/librte_vhost/vhost_user/virtio-net-user.c
@@ -401,6 +401,7 @@ user_set_log_base(int vid, struct VhostUserMsg *msg)
 	 * fail when offset is not page size aligned.
 	 */
 	addr = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+	close(fd);
 	if (addr == MAP_FAILED) {
 		RTE_LOG(ERR, VHOST_CONFIG, "mmap log base failed!\n");
 		return -1;
-- 
2.7.4

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

* [PATCH v2 2/2] vhost: unmap log memory on cleanup.
  2016-06-16  9:16 [PATCH v2 0/2] vhost: Fix leaks on migration Ilya Maximets
  2016-06-16  9:16 ` [PATCH v2 1/2] vhost: fix leak of file descriptors Ilya Maximets
@ 2016-06-16  9:16 ` Ilya Maximets
  2016-06-20  5:53 ` [PATCH v2 0/2] vhost: Fix leaks on migration Yuanhan Liu
  2 siblings, 0 replies; 4+ messages in thread
From: Ilya Maximets @ 2016-06-16  9:16 UTC (permalink / raw)
  To: dev, Huawei Xie, Yuanhan Liu
  Cc: Dyasly Sergey, Heetae Ahn, Vladimir Shilkin, Victor Kaplansky,
	Ilya Maximets

Fixes memory leak on QEMU migration.

Fixes: 54f9e32305d4 ("vhost: handle dirty pages logging request")
Signed-off-by: Ilya Maximets <i.maximets@samsung.com>
---
 lib/librte_vhost/vhost-net.h                  |  1 +
 lib/librte_vhost/vhost_user/virtio-net-user.c | 15 +++++++++++++--
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/lib/librte_vhost/vhost-net.h b/lib/librte_vhost/vhost-net.h
index ec8f964..38593a2 100644
--- a/lib/librte_vhost/vhost-net.h
+++ b/lib/librte_vhost/vhost-net.h
@@ -134,6 +134,7 @@ struct virtio_net {
 	char			ifname[IF_NAME_SZ];
 	uint64_t		log_size;
 	uint64_t		log_base;
+	uint64_t		log_addr;
 	struct ether_addr	mac;
 
 } __rte_cache_aligned;
diff --git a/lib/librte_vhost/vhost_user/virtio-net-user.c b/lib/librte_vhost/vhost_user/virtio-net-user.c
index e6a2aed..a867a43 100644
--- a/lib/librte_vhost/vhost_user/virtio-net-user.c
+++ b/lib/librte_vhost/vhost_user/virtio-net-user.c
@@ -95,6 +95,10 @@ vhost_backend_cleanup(struct virtio_net *dev)
 		free(dev->mem);
 		dev->mem = NULL;
 	}
+	if (dev->log_addr) {
+		munmap((void *)(uintptr_t)dev->log_addr, dev->log_size);
+		dev->log_addr = 0;
+	}
 }
 
 int
@@ -407,8 +411,15 @@ user_set_log_base(int vid, struct VhostUserMsg *msg)
 		return -1;
 	}
 
-	/* TODO: unmap on stop */
-	dev->log_base = (uint64_t)(uintptr_t)addr + off;
+	/*
+	 * Free previously mapped log memory on occasionally
+	 * multiple VHOST_USER_SET_LOG_BASE.
+	 */
+	if (dev->log_addr) {
+		munmap((void *)(uintptr_t)dev->log_addr, dev->log_size);
+	}
+	dev->log_addr = (uint64_t)(uintptr_t)addr;
+	dev->log_base = dev->log_addr + off;
 	dev->log_size = size;
 
 	return 0;
-- 
2.7.4

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

* Re: [PATCH v2 0/2] vhost: Fix leaks on migration.
  2016-06-16  9:16 [PATCH v2 0/2] vhost: Fix leaks on migration Ilya Maximets
  2016-06-16  9:16 ` [PATCH v2 1/2] vhost: fix leak of file descriptors Ilya Maximets
  2016-06-16  9:16 ` [PATCH v2 2/2] vhost: unmap log memory on cleanup Ilya Maximets
@ 2016-06-20  5:53 ` Yuanhan Liu
  2 siblings, 0 replies; 4+ messages in thread
From: Yuanhan Liu @ 2016-06-20  5:53 UTC (permalink / raw)
  To: Ilya Maximets
  Cc: dev, Huawei Xie, Dyasly Sergey, Heetae Ahn, Vladimir Shilkin,
	Victor Kaplansky

Applied to dpdk-next-virtio. Thanks!

	--yliu

On Thu, Jun 16, 2016 at 12:16:35PM +0300, Ilya Maximets wrote:
> v2:
> 	* rebased on top of dpdk-next-virtio/master
> 
> Ilya Maximets (2):
>   vhost: fix leak of file descriptors.
>   vhost: unmap log memory on cleanup.
> 
>  lib/librte_vhost/vhost-net.h                  |  1 +
>  lib/librte_vhost/vhost_user/virtio-net-user.c | 16 ++++++++++++++--
>  2 files changed, 15 insertions(+), 2 deletions(-)
> 
> -- 
> 2.7.4

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

end of thread, other threads:[~2016-06-20  5:52 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-16  9:16 [PATCH v2 0/2] vhost: Fix leaks on migration Ilya Maximets
2016-06-16  9:16 ` [PATCH v2 1/2] vhost: fix leak of file descriptors Ilya Maximets
2016-06-16  9:16 ` [PATCH v2 2/2] vhost: unmap log memory on cleanup Ilya Maximets
2016-06-20  5:53 ` [PATCH v2 0/2] vhost: Fix leaks on migration Yuanhan Liu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.