Module Name: src Committed By: hannken Date: Sat Apr 23 16:22:23 UTC 2022
Modified Files: src/sys/dev/dkwedge: dk.c src/sys/ufs/ffs: ffs_alloc.c Log Message: Need vnode locked fot VOP_FDISCARD(). To generate a diff of this commit: cvs rdiff -u -r1.110 -r1.111 src/sys/dev/dkwedge/dk.c cvs rdiff -u -r1.170 -r1.171 src/sys/ufs/ffs/ffs_alloc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/dkwedge/dk.c diff -u src/sys/dev/dkwedge/dk.c:1.110 src/sys/dev/dkwedge/dk.c:1.111 --- src/sys/dev/dkwedge/dk.c:1.110 Sat Jan 15 19:34:11 2022 +++ src/sys/dev/dkwedge/dk.c Sat Apr 23 16:22:23 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: dk.c,v 1.110 2022/01/15 19:34:11 riastradh Exp $ */ +/* $NetBSD: dk.c,v 1.111 2022/04/23 16:22:23 hannken Exp $ */ /*- * Copyright (c) 2004, 2005, 2006, 2007 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: dk.c,v 1.110 2022/01/15 19:34:11 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: dk.c,v 1.111 2022/04/23 16:22:23 hannken Exp $"); #ifdef _KERNEL_OPT #include "opt_dkwedge.h" @@ -1592,6 +1592,7 @@ dkdiscard(dev_t dev, off_t pos, off_t le struct dkwedge_softc *sc = dkwedge_lookup(dev); unsigned shift; off_t offset, maxlen; + int error; if (sc == NULL) return (ENODEV); @@ -1615,7 +1616,12 @@ dkdiscard(dev_t dev, off_t pos, off_t le return (EINVAL); pos += offset; - return VOP_FDISCARD(sc->sc_parent->dk_rawvp, pos, len); + + vn_lock(sc->sc_parent->dk_rawvp, LK_EXCLUSIVE | LK_RETRY); + error = VOP_FDISCARD(sc->sc_parent->dk_rawvp, pos, len); + VOP_UNLOCK(sc->sc_parent->dk_rawvp); + + return error; } /* Index: src/sys/ufs/ffs/ffs_alloc.c diff -u src/sys/ufs/ffs/ffs_alloc.c:1.170 src/sys/ufs/ffs/ffs_alloc.c:1.171 --- src/sys/ufs/ffs/ffs_alloc.c:1.170 Fri Sep 3 21:55:01 2021 +++ src/sys/ufs/ffs/ffs_alloc.c Sat Apr 23 16:22:23 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: ffs_alloc.c,v 1.170 2021/09/03 21:55:01 andvar Exp $ */ +/* $NetBSD: ffs_alloc.c,v 1.171 2022/04/23 16:22:23 hannken Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -70,7 +70,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ffs_alloc.c,v 1.170 2021/09/03 21:55:01 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ffs_alloc.c,v 1.171 2022/04/23 16:22:23 hannken Exp $"); #if defined(_KERNEL_OPT) #include "opt_ffs.h" @@ -1649,10 +1649,12 @@ ffs_discardcb(struct work *wk, void *arg start = FFS_FSBTOBYTES(fs, td->bno); len = td->size; + vn_lock(td->devvp, LK_EXCLUSIVE | LK_RETRY); #ifdef TRIMDEBUG error = #endif VOP_FDISCARD(td->devvp, start, len); + VOP_UNLOCK(td->devvp); #ifdef TRIMDEBUG printf("trim(%" PRId64 ",%ld):%d\n", td->bno, td->size, error); #endif