git: 959f0d0cdb14 - stable/14 - md(4): always trim the last partial sector
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 20 Oct 2024 00:34:49 UTC
The branch stable/14 has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=959f0d0cdb1482d754f24b7ae16bda0ac2e7b31a
commit 959f0d0cdb1482d754f24b7ae16bda0ac2e7b31a
Author: Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2024-10-13 21:28:22 +0000
Commit: Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2024-10-20 00:33:04 +0000
md(4): always trim the last partial sector
PR: 281978
(cherry picked from commit 4bf34c597c44a2393ac5ec483e9cecac128d8202)
---
sys/dev/md/md.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/sys/dev/md/md.c b/sys/dev/md/md.c
index 1d531b88193f..3285cfef830d 100644
--- a/sys/dev/md/md.c
+++ b/sys/dev/md/md.c
@@ -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);
}