md(4): always trim the last partial sector

PR:	281978

(cherry picked from commit 4bf34c597c)
This commit is contained in:
Konstantin Belousov 2024-10-14 00:28:22 +03:00
parent d4bcad451f
commit 959f0d0cdb

View file

@ -1303,6 +1303,7 @@ mdinit(struct md_s *sc)
{
struct g_geom *gp;
struct g_provider *pp;
unsigned remn;
g_topology_lock();
gp = g_new_geomf(&g_md_class, "md%d", sc->unit);
@ -1311,6 +1312,13 @@ mdinit(struct md_s *sc)
devstat_remove_entry(pp->stat);
pp->stat = NULL;
pp->flags |= G_PF_DIRECT_SEND | G_PF_DIRECT_RECEIVE;
/* Prune off any residual fractional sector. */
remn = sc->mediasize % sc->sectorsize;
if (remn != 0) {
printf("md%d: truncating fractional last sector by %u bytes\n",
sc->unit, remn);
sc->mediasize -= remn;
}
pp->mediasize = sc->mediasize;
pp->sectorsize = sc->sectorsize;
switch (sc->type) {
@ -1680,7 +1688,7 @@ kern_mdattach_locked(struct thread *td, struct md_req *mdr)
{
struct md_s *sc;
unsigned sectsize;
int error, i;
int error;
sx_assert(&md_sx, SA_XLOCKED);
@ -1752,10 +1760,6 @@ err_after_new:
return (error);
}
/* Prune off any residual fractional sector */
i = sc->mediasize % sc->sectorsize;
sc->mediasize -= i;
mdinit(sc);
return (0);
}