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 b4cb3fe0e3 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
This commit is contained in:
Colin Percival 2021-09-30 14:48:14 -07:00
parent a6499c56ab
commit ce73f768b7

View File

@ -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));