aboutsummaryrefslogtreecommitdiff
path: root/sys/geom
diff options
context:
space:
mode:
authorsanthoshkumar-mani <santhosh.santuu@gmail.com>2023-07-01 17:11:57 +0000
committerWarner Losh <imp@FreeBSD.org>2023-07-01 17:14:49 +0000
commitd3eb9d3db3aa36df13f96c48bff8acdf626464c5 (patch)
treec214a145cf53e6492a46ae33f31f78bbb4f0177e /sys/geom
parent6f9388d50588e99dc6abb29aade52dc8e6d44d98 (diff)
Diffstat (limited to 'sys/geom')
-rw-r--r--sys/geom/geom_disk.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/geom/geom_disk.c b/sys/geom/geom_disk.c
index 90fe0216dd8b..a000dfe6c4f2 100644
--- a/sys/geom/geom_disk.c
+++ b/sys/geom/geom_disk.c
@@ -71,6 +71,7 @@ struct g_disk_softc {
char led[64];
uint32_t state;
struct mtx done_mtx;
+ bool flush_notsup_succeed;
};
static g_access_t g_disk_access;
@@ -539,7 +540,7 @@ g_disk_start(struct bio *bp)
g_trace(G_T_BIO, "g_disk_flushcache(%s)",
bp->bio_to->name);
if (!(dp->d_flags & DISKFLAG_CANFLUSHCACHE)) {
- error = EOPNOTSUPP;
+ error = (sc->flush_notsup_succeed) ? 0 : EOPNOTSUPP;
break;
}
/*FALLTHROUGH*/
@@ -760,6 +761,10 @@ g_disk_create(void *arg, int flag)
SYSCTL_CHILDREN(sc->sysctl_tree), OID_AUTO, "flags",
CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, dp, 0,
g_disk_sysctl_flags, "A", "Report disk flags");
+ SYSCTL_ADD_BOOL(&sc->sysctl_ctx,
+ SYSCTL_CHILDREN(sc->sysctl_tree), OID_AUTO, "flush_notsup_succeed",
+ CTLFLAG_RWTUN, &sc->flush_notsup_succeed, sizeof(sc->flush_notsup_succeed),
+ "Do not return EOPNOTSUPP if there is no cache to flush");
}
pp->private = sc;
dp->d_geom = gp;