[PATCH 1/1] sandbox: host bind must close file descriptor

Heinrich Schuchardt xypron.glpk at gmx.de
Sun Jan 31 11:38:56 CET 2021


Each invocation of the 'host bind' command with a file name argument opens
a file descriptor. The next invocation of the 'host bind' command destroys
the block device but the file descriptor remains open. The same holds true
for the 'unbind blk' command.

Close the file descriptor when unbinding the host block device.

Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
---
 drivers/block/sandbox.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/drivers/block/sandbox.c b/drivers/block/sandbox.c
index f57f690d3c..02992ac34f 100644
--- a/drivers/block/sandbox.c
+++ b/drivers/block/sandbox.c
@@ -230,6 +230,25 @@ int host_get_dev_err(int devnum, struct blk_desc **blk_devp)
 }

 #ifdef CONFIG_BLK
+
+int sandbox_host_unbind(struct udevice *dev)
+{
+	struct host_block_dev *host_dev;
+
+	host_dev = dev_get_plat(dev);
+	if (host_dev) {
+		if (host_dev->fd) {
+			os_close(host_dev->fd);
+			host_dev->fd = 0;
+		} else {
+			log_err("missing file descriptor\n");
+		}
+	} else {
+		log_err("missing platform data\n");
+	}
+	return 0;
+}
+
 static const struct blk_ops sandbox_host_blk_ops = {
 	.read	= host_block_read,
 	.write	= host_block_write,
@@ -239,6 +258,7 @@ U_BOOT_DRIVER(sandbox_host_blk) = {
 	.name		= "sandbox_host_blk",
 	.id		= UCLASS_BLK,
 	.ops		= &sandbox_host_blk_ops,
+	.unbind		= sandbox_host_unbind,
 	.plat_auto	= sizeof(struct host_block_dev),
 };
 #else
--
2.29.2



More information about the U-Boot mailing list