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
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to