#
7013797e |
| 06-Aug-2020 |
Mark Johnston <markj@FreeBSD.org> |
Remove the vfs.reassignbufcalls counter and sysctl.
As the 20-year old comment above it suggests, the counter is of dubious value. Moreover, the (global) counter was not updated precisely and hurts
Remove the vfs.reassignbufcalls counter and sysctl.
As the 20-year old comment above it suggests, the counter is of dubious value. Moreover, the (global) counter was not updated precisely and hurts scalability.
Reviewed by: cem, kib, mjg MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D25965
show more ...
|
Revision tags: vendor/bc/3.1.5 |
|
#
d292b194 |
| 05-Aug-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
vfs: remove the obsolete privused argument from vaccess
This brings argument count down to 6, which is passable without the stack on amd64.
|
#
db99ec56 |
| 04-Aug-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
vfs: support lockless dotdot lookup
Tested by: pho
|
#
6e10434c |
| 04-Aug-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
cache: add cache_purge_vgone
cache_purge locklessly checks whether the vnode at hand has any namecache entries. This can race with a concurrent purge which managed to remove the last entry, but may
cache: add cache_purge_vgone
cache_purge locklessly checks whether the vnode at hand has any namecache entries. This can race with a concurrent purge which managed to remove the last entry, but may not be done touching the vnode.
Make sure we observe the relevant vnode lock as not taken before proceeding with vgone.
Paired with the fact that doomed vnodes cannnot receive entries this restores the invariant that there are no namecache-related writing users past cache_purge in vgone.
Reported by: pho
show more ...
|
Revision tags: vendor/device-tree/5.8, vendor/bc/3.1.4 |
|
#
838984de |
| 02-Aug-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
vfs: move namecache initialisation into cache_vnode_init
|
Revision tags: vendor/llvm-project/llvmorg-11.0.0-rc1-25-g903c872b169, vendor/pcg-c/20190718-83252d9 |
|
#
848f8eff |
| 30-Jul-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
vfs: inline vops if there are no pre/post associated calls
This removes a level of indirection from frequently used methods, most notably VOP_LOCK1 and VOP_UNLOCK1.
Tested by: pho
|
Revision tags: vendor/llvm-project/llvmorg-11-init-20933-g3c1fca803bc, vendor/llvm-project/llvmorg-11-init-20887-g2e10b7a39b9 |
|
#
07d2145a |
| 25-Jul-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
vfs: add the infrastructure for lockless lookup
Reviewed by: kib Tested by: pho (in a patchset) Differential Revision: https://reviews.freebsd.org/D25577
|
#
0379ff6a |
| 25-Jul-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
vfs: introduce vnode sequence counters
Modified on each permission change and link/unlink.
Reviewed by: kib Tested by: pho (in a patchset) Differential Revision: https://reviews.freebsd.org/D25573
|
#
68ee1dda |
| 24-Jul-2020 |
Conrad Meyer <cem@FreeBSD.org> |
Add unlocked/SMR fast path to getblk()
Convert the bufobj tries to an SMR zone/PCTRIE and add a gbincore_unlocked() API wrapping this functionality. Use it for a fast path in getblkx(), falling bac
Add unlocked/SMR fast path to getblk()
Convert the bufobj tries to an SMR zone/PCTRIE and add a gbincore_unlocked() API wrapping this functionality. Use it for a fast path in getblkx(), falling back to locked lookup if we raced a thread changing the buf's identity.
Reported by: Attilio Reviewed by: kib, markj Testing: pho (in progress) Sponsored by: Isilon Differential Revision: https://reviews.freebsd.org/D25782
show more ...
|
Revision tags: vendor/acpica/20200717, vendor/sendmail/8.16.1, vendor/NetBSD/bmake/20200710, vendor/bc/3.1.3 |
|
#
422f38d8 |
| 10-Jul-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
vfs: fix trivial whitespace issues which don't interefere with blame
.. even without the -w switch
|
Revision tags: vendor/NetBSD/bmake/20200704, vendor/sqlite3/sqlite-3320300, vendor/bc/3.1.1 |
|
#
9b0c2e59 |
| 06-Jul-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
vfs: expand on vhold_smr comment
|
#
f8022be3 |
| 01-Jul-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
vfs: protect vnodes with smr
vget_prep_smr and vhold_smr can be used to ref a vnode while within vfs_smr section, allowing consumers to get away without locking.
See vhold_smr and vdropl for commen
vfs: protect vnodes with smr
vget_prep_smr and vhold_smr can be used to ref a vnode while within vfs_smr section, allowing consumers to get away without locking.
See vhold_smr and vdropl for comments explaining caveats.
Reviewed by: kib Testec by: pho Differential Revision: https://reviews.freebsd.org/D23913
show more ...
|
Revision tags: vendor/NetBSD/bmake/20200629, vendor/llvm-project/llvmorg-10.0.1-0-gef32c611aa2, vendor/llvm-project/llvmorg-10.0.1-rc2-0-g77d76b71d7d, vendor/bc/3.0.2, vendor/llvm-project/llvmorg-10.0.0-129-gd24d5c8e308, vendor/ntp/4.2.8p15, vendor/byacc/20200330, vendor/llvm-project/llvmorg-10.0.0-97-g6f71678ecd2, vendor/flex/2.6.4, vendor/file/5.39, vendor/blocklist/20200615, vendor/opencsd/v0.14.2, vendor/sqlite3/sqlite-3320200, release/11.4.0, upstream/11.4.0, vendor/sqlite3/sqlite-3320000, vendor/NetBSD/bmake/20200606, vendor/device-tree/5.7, vendor/edk2/ca407c7246bf405da6d9b1b9d93e5e7f17b4b1f9, vendor/subversion/subversion-1.14.0, vendor/apr/apr-1.7.0, vendor/acpica/20200528, vendor/ena-com/2.2.0, vendor/zstd/1.4.5, vendor/llvm-project/llvmorg-10.0.1-rc1-0-gf79cd71e145, vendor/unbound/1.10.1 |
|
#
245bfd34 |
| 21-May-2020 |
Ryan Moeller <freqlabs@FreeBSD.org> |
Deduplicate fsid comparisons
Comparing fsid_t objects requires internal knowledge of the fsid structure and yet this is duplicated across a number of places in the code.
Simplify by creating a fsid
Deduplicate fsid comparisons
Comparing fsid_t objects requires internal knowledge of the fsid structure and yet this is duplicated across a number of places in the code.
Simplify by creating a fsidcmp function (macro).
Reviewed by: mjg, rmacklem Approved by: mav (mentor) MFC after: 1 week Sponsored by: iXsystems, Inc. Differential Revision: https://reviews.freebsd.org/D24749
show more ...
|
Revision tags: vendor/NetBSD/bmake/20200517, vendor/libarchive/3.4.3, vendor/acpica/20200430, vendor/lib9p/7ddb1164407da19b9b1afb83df83ae65a71a9a66, vendor/tzdata/tzdata2020a, vendor/openssl/1.1.1g, vendor/sqlite3/sqlite-3310100, vendor/device-tree/5.6, vendor/google/googletest/1.10.0, vendor/llvm-project/llvmorg-10.0.0-0-gd32170dbd5b, vendor/bsnmp/1.14, vendor/openssl/1.1.1f, vendor/acpica/20200326, vendor/xz/5.2.5, vendor/llvm-project/llvmorg-10.0.0-rc4-5-g52c365aa9ca, vendor/openssl/1.1.1e, vendor/kyua/0.13-a685f91, vendor/lutok/0.4-8f8eaef |
|
#
f15ccf88 |
| 06-Mar-2020 |
Chuck Silvers <chs@FreeBSD.org> |
Add a new "mntfs" pseudo file system which provides private device vnodes for file systems to safely access their disk devices, and adapt FFS to use it. Also add a new BO_NOBUFS flag to allow enforci
Add a new "mntfs" pseudo file system which provides private device vnodes for file systems to safely access their disk devices, and adapt FFS to use it. Also add a new BO_NOBUFS flag to allow enforcing that file systems using mntfs vnodes do not accidentally use the original devfs vnode to create buffers.
Reviewed by: kib, mckusick Approved by: imp (mentor) Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D23787
show more ...
|
Revision tags: vendor/llvm-project/llvmorg-10.0.0-rc3-1-gc290cb61fdc, vendor/ntp/4.2.8p14, vendor/device-tree/5.5, vendor/llvm-project/llvmorg-10.0.0-rc2-70-ge5cb70267e7 |
|
#
2782c00c |
| 23-Feb-2020 |
Ryan Libby <rlibby@FreeBSD.org> |
vfs: quiet -Wwrite-strings
Reviewed by: kib, markj Differential Revision: https://reviews.freebsd.org/D23797
|
Revision tags: vendor/ncurses/6.2-20200215 |
|
#
6c5f36ff |
| 19-Feb-2020 |
Jeff Roberson <jeff@FreeBSD.org> |
Eliminate some unnecessary uses of UMA_ZONE_VM. Only zones involved in virtual address or physical page allocation need to be marked with this flag.
Reviewed by: markj Tested by: pho Differential R
Eliminate some unnecessary uses of UMA_ZONE_VM. Only zones involved in virtual address or physical page allocation need to be marked with this flag.
Reviewed by: markj Tested by: pho Differential Revision: https://reviews.freebsd.org/D23712
show more ...
|
#
3403d524 |
| 16-Feb-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
vfs: fix vlrureclaim ->v_object access
The routine was checking for ->v_type == VBAD. Since vgone drops the interlock early sets this type at the end of the process of dooming a vnode, this opens a
vfs: fix vlrureclaim ->v_object access
The routine was checking for ->v_type == VBAD. Since vgone drops the interlock early sets this type at the end of the process of dooming a vnode, this opens a time window where it can clear the pointer while the inerlock-holders is accessing it.
Another note is that the code was: (vp->v_object != NULL && vp->v_object->resident_page_count > trigger)
With the compiler being fully allowed to emit another read to get the pointer, and in fact it did on the kernel used by pho.
Use atomic_load_ptr and remember the result.
Note that this depends on type-safety of vm_object.
Reported by: pho
show more ...
|
#
c6150094 |
| 16-Feb-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
vfs: check early for VCHR in vput_final to short-circuit in the common case
Otherwise the compiler inlines v_decr_devcount which keps getting jumped over in the common case of not dealing with a dev
vfs: check early for VCHR in vput_final to short-circuit in the common case
Otherwise the compiler inlines v_decr_devcount which keps getting jumped over in the common case of not dealing with a device.
show more ...
|
#
df0d5a2a |
| 14-Feb-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
vfs: remove no longer needed atomic_load_ptr casts
|
Revision tags: vendor/llvm-project/llvmorg-10.0.0-rc2-0-g90c78073f73, vendor/openssh/8.0p1, vendor/acpica/20200214 |
|
#
46022147 |
| 12-Feb-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
vfs: refactor vputx and add more comment
Reviewed by: jeff (previous version) Tested by: pho (previous version) Differential Revision: https://reviews.freebsd.org/D23530
|
#
123c5197 |
| 12-Feb-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
vfs: switch to smp_rendezvous_cpus_retry for vfs_op_thread_enter/exit
In particular on amd64 this eliminates an atomic op in the common case, trading it for IPIs in the uncommon case of catching CPU
vfs: switch to smp_rendezvous_cpus_retry for vfs_op_thread_enter/exit
In particular on amd64 this eliminates an atomic op in the common case, trading it for IPIs in the uncommon case of catching CPUs executing the code while the filesystem is getting suspended or unmounted.
show more ...
|
Revision tags: vendor/libarchive/3.4.2 |
|
#
57349a4f |
| 11-Feb-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
vfs: fix vhold race in mnt_vnode_next_lazy_relock
vdrop can set the hold count to 0 and wait for the ->mnt_listmtx held by mnt_vnode_next_lazy_relock caller. The routine incorrectly asserted the cou
vfs: fix vhold race in mnt_vnode_next_lazy_relock
vdrop can set the hold count to 0 and wait for the ->mnt_listmtx held by mnt_vnode_next_lazy_relock caller. The routine incorrectly asserted the count has to be > 0.
Reported by: pho Tested by: pho
show more ...
|
#
2e57c8fd |
| 10-Feb-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
vfs: fix device count leak on vrele racing with vgone
The race is:
CPU1 CPU2 devfs_reclaim_vchr make v_usecount 0
vfs: fix device count leak on vrele racing with vgone
The race is:
CPU1 CPU2 devfs_reclaim_vchr make v_usecount 0 VI_LOCK sees v_usecount == 0, no updates vp->v_rdev = NULL; ... VI_UNLOCK VI_LOCK v_decr_devcount sees v_rdev == NULL, no updates
In this scenario si_devcount decrement is not performed.
Note this can only happen if the vnode lock is not held.
Reviewed by: kib Tested by: pho Differential Revision: https://reviews.freebsd.org/D23529
show more ...
|
#
cd951a0d |
| 10-Feb-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
vfs: fix lock recursion in vrele
vrele is supposed to be called with an unlocked vnode, but this was never asserted for if v_usecount was > 0. For such counts the lock is never touched by the routin
vfs: fix lock recursion in vrele
vrele is supposed to be called with an unlocked vnode, but this was never asserted for if v_usecount was > 0. For such counts the lock is never touched by the routine. As a result the kernel has several consumers which expect vunref semantics and get away with calling vrele since they happen to never do it when this is the last reference (and for some of them this may happen to be a guarantee).
Work around the problem by changing vrele semantics to tolerate being called with a lock. This eliminates a possible bug where the lock is already held and vputx takes it anyway.
Reviewed by: kib Tested by: pho Differential Revision: https://reviews.freebsd.org/D23528
show more ...
|
Revision tags: vendor/file/5.38 |
|
#
2f7f11b7 |
| 08-Feb-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
vfs: tidy up vget_finish and vn_lock
- remove assertion which duplicates vn_lock - use VNPASS instead of retyping the failure - report what flags were passed if panicking on them
|