aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Percival <cperciva@FreeBSD.org>2021-09-30 21:48:14 +0000
committerColin Percival <cperciva@FreeBSD.org>2021-09-30 21:48:14 +0000
commitce73f768b76486b1562f207a6fc1cef87065418a (patch)
treecae906ad6014e88ae955c34129403016c4a0d64e
parenta6499c56ab6ca54f01dca44b7e34a0fc6a680e90 (diff)
downloadsrc-ce73f768b76486b1562f207a6fc1cef87065418a.tar.gz
src-ce73f768b76486b1562f207a6fc1cef87065418a.zip
EFI loader: Don't free bcache for DEVT_DISK devs
Booting on an EC2 c5.xlarge instance, this reduces the number of I/Os performed from 609 to 432, reduces the total number of blocks read from 61963 to 60797, and reduces the time spent in the loader by 39 ms. Note that b4cb3fe0e39a allowed the bcache to be retained for most of the boot process, but relies on mounting filesystems; this commit allows the bcache to be retained at the start of the boot process, before the root filesystem has been located. Reviewed by: imp, tsoome MFC after: 1 week Sponsored by: https://www.patreon.com/cperciva Differential Revision: https://reviews.freebsd.org/D32239
-rw-r--r--stand/efi/libefi/efipart.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/stand/efi/libefi/efipart.c b/stand/efi/libefi/efipart.c
index aede28ef40c3..7807c17077a6 100644
--- a/stand/efi/libefi/efipart.c
+++ b/stand/efi/libefi/efipart.c
@@ -949,8 +949,10 @@ efipart_close(struct open_file *f)
pd->pd_open--;
if (pd->pd_open == 0) {
pd->pd_blkio = NULL;
- bcache_free(pd->pd_bcache);
- pd->pd_bcache = NULL;
+ if (dev->dd.d_dev->dv_type != DEVT_DISK) {
+ bcache_free(pd->pd_bcache);
+ pd->pd_bcache = NULL;
+ }
}
if (dev->dd.d_dev->dv_type == DEVT_DISK)
return (disk_close(dev));