svn commit: r337356 - head/stand/i386/libi386
Toomas Soome
tsoome at FreeBSD.org
Sun Aug 5 19:17:08 UTC 2018
Author: tsoome
Date: Sun Aug 5 19:17:07 2018
New Revision: 337356
URL: https://svnweb.freebsd.org/changeset/base/337356
Log:
loader: bd_open() should cleanup from disk_open() error
Since bd_open() does early increment for reference counter and bcache
allocation, it also should undo those in case of the error.
Also remove unused variables rdev, g_err.
Modified:
head/stand/i386/libi386/biosdisk.c
Modified: head/stand/i386/libi386/biosdisk.c
==============================================================================
--- head/stand/i386/libi386/biosdisk.c Sun Aug 5 18:27:36 2018 (r337355)
+++ head/stand/i386/libi386/biosdisk.c Sun Aug 5 19:17:07 2018 (r337356)
@@ -337,11 +337,11 @@ bd_print(int verbose)
static int
bd_open(struct open_file *f, ...)
{
- struct disk_devdesc *dev, rdev;
+ struct disk_devdesc *dev;
struct disk_devdesc disk;
- int err, g_err;
va_list ap;
uint64_t size;
+ int rc;
va_start(ap, f);
dev = va_arg(ap, struct disk_devdesc *);
@@ -365,6 +365,7 @@ bd_open(struct open_file *f, ...)
disk.d_slice = -1;
disk.d_partition = -1;
disk.d_offset = 0;
+
if (disk_open(&disk, BD(dev).bd_sectors * BD(dev).bd_sectorsize,
BD(dev).bd_sectorsize) == 0) {
@@ -376,10 +377,17 @@ bd_open(struct open_file *f, ...)
disk_close(&disk);
}
- err = disk_open(dev, BD(dev).bd_sectors * BD(dev).bd_sectorsize,
+ rc = disk_open(dev, BD(dev).bd_sectors * BD(dev).bd_sectorsize,
BD(dev).bd_sectorsize);
+ if (rc != 0) {
+ BD(dev).bd_open--;
+ if (BD(dev).bd_open == 0) {
+ bcache_free(BD(dev).bd_bcache);
+ BD(dev).bd_bcache = NULL;
+ }
+ }
- return (err);
+ return (rc);
}
static int
More information about the svn-src-head
mailing list