| Home | Sort by: relevance | last modified time | path |
| /src/tools/file/ | |
| Makefile | 1.3.6.1 Sun Jun 24 19:45:41 UTC 2007 ghen Pull up following revision(s) (requested by pooka in ticket #1804): dist/file/: synced with HEAD on 20070615 distrib/sets/lists/base/shl.elf: revision 1.222 distrib/sets/lists/base/shl.mi: revision 1.375 via patch lib/Makefile: revision 1.108 via patch lib/libmagic/Makefile: revision 1.5 lib/libmagic/config.h: patch lib/libmagic/shlib_version: revision 1.3-1.4 tools/file/Makefile: revision 1.4 usr.bin/file/Makefile: revision 1.51-1.53 Update file(1) to version 4.21, including security fixes (CVE-2007-1536 and CVE-2007-2799). 1.3.4.1 Sun Jun 24 19:43:44 UTC 2007 ghen Pull up following revision(s) (requested by pooka in ticket #1804): dist/file/: synced with HEAD on 20070615 distrib/sets/lists/base/shl.elf: revision 1.222 distrib/sets/lists/base/shl.mi: revision 1.375 via patch lib/Makefile: revision 1.108 via patch lib/libmagic/Makefile: revision 1.5 lib/libmagic/config.h: patch lib/libmagic/shlib_version: revision 1.3-1.4 tools/file/Makefile: revision 1.4 usr.bin/file/Makefile: revision 1.51-1.53 Update file(1) to version 4.21, including security fixes (CVE-2007-1536 and CVE-2007-2799). 1.3.2.1 Sun Jun 24 19:42:10 UTC 2007 ghen Pull up following revision(s) (requested by pooka in ticket #1804): dist/file/: synced with HEAD on 20070615 distrib/sets/lists/base/shl.elf: revision 1.222 distrib/sets/lists/base/shl.mi: revision 1.375 via patch lib/Makefile: revision 1.108 via patch lib/libmagic/Makefile: revision 1.5 lib/libmagic/config.h: patch lib/libmagic/shlib_version: revision 1.3-1.4 tools/file/Makefile: revision 1.4 usr.bin/file/Makefile: revision 1.51-1.53 Update file(1) to version 4.21, including security fixes (CVE-2007-1536 and CVE-2007-2799). |
| /src/sys/arch/i386/pnpbios/ | |
| lm_pnpbios.c | 1.2.6.1 Sun Jul 30 17:54:10 UTC 2000 bouyer Pull up (requested by thorpej): lm_pnpbios.c 1.2->1.3 files 1.374->1.375 nslm7x.c 1.3->1.4 nslm7xvar.h 1.2->1.3 lm_isa.c 1.2->1.3 files.pci 1.96->1.97 viaenv.c 1.2->1.3 sysmon.c 1.1 sysmonvar.h 1.1 Add a clearing-house pseudo-device for system monitoring devices such as the LM78 and VT82C686A (and eventually ACPI). Multiple sensor devices can be hooked registered with `sysmon', and eventually sysmon will also handle hardware (and software) watchdog timers. Convert the `lm' and `viaenv' drivers to the new interface. |
| /src/sys/fs/udf/ | |
| udf_readwrite.c | 1.9 Tue Dec 16 16:18:25 UTC 2008 pooka The great QUOTA purge of '08: get rid of those #ifdef QUOTA and #include "opt_quota.h" which do exactly nothing. Speeds up kernel compilation by 1.375*10^-20001 seconds. But leave the most moxious comment in msdosfs_vfsops untouched. |
| udf_strat_bootstrap.c | 1.3 Tue Dec 16 16:18:25 UTC 2008 pooka branches: 1.3.24; 1.3.40; The great QUOTA purge of '08: get rid of those #ifdef QUOTA and #include "opt_quota.h" which do exactly nothing. Speeds up kernel compilation by 1.375*10^-20001 seconds. But leave the most moxious comment in msdosfs_vfsops untouched. |
| udf_strat_direct.c | 1.7 Tue Dec 16 16:18:25 UTC 2008 pooka The great QUOTA purge of '08: get rid of those #ifdef QUOTA and #include "opt_quota.h" which do exactly nothing. Speeds up kernel compilation by 1.375*10^-20001 seconds. But leave the most moxious comment in msdosfs_vfsops untouched. |
| udf_strat_sequential.c | 1.6 Tue Dec 16 16:18:25 UTC 2008 pooka The great QUOTA purge of '08: get rid of those #ifdef QUOTA and #include "opt_quota.h" which do exactly nothing. Speeds up kernel compilation by 1.375*10^-20001 seconds. But leave the most moxious comment in msdosfs_vfsops untouched. |
| udf_strat_rmw.c | 1.16 Tue Dec 16 16:18:25 UTC 2008 pooka The great QUOTA purge of '08: get rid of those #ifdef QUOTA and #include "opt_quota.h" which do exactly nothing. Speeds up kernel compilation by 1.375*10^-20001 seconds. But leave the most moxious comment in msdosfs_vfsops untouched. |
| udf_allocation.c | 1.19 Tue Dec 16 16:18:25 UTC 2008 pooka branches: 1.19.2; The great QUOTA purge of '08: get rid of those #ifdef QUOTA and #include "opt_quota.h" which do exactly nothing. Speeds up kernel compilation by 1.375*10^-20001 seconds. But leave the most moxious comment in msdosfs_vfsops untouched. |
| /src/sys/dev/isa/ | |
| lm_isa.c | 1.2.4.1 Sun Jul 30 17:54:14 UTC 2000 bouyer Pull up (requested by thorpej): lm_pnpbios.c 1.2->1.3 files 1.374->1.375 nslm7x.c 1.3->1.4 nslm7xvar.h 1.2->1.3 lm_isa.c 1.2->1.3 files.pci 1.96->1.97 viaenv.c 1.2->1.3 sysmon.c 1.1 sysmonvar.h 1.1 Add a clearing-house pseudo-device for system monitoring devices such as the LM78 and VT82C686A (and eventually ACPI). Multiple sensor devices can be hooked registered with `sysmon', and eventually sysmon will also handle hardware (and software) watchdog timers. Convert the `lm' and `viaenv' drivers to the new interface. |
| /src/sys/arch/i386/stand/efiboot/bootx64/ | |
| Makefile | 1.1.26.2 Mon Aug 17 10:30:22 UTC 2020 martin Pull up following revision(s) (requested by riastradh in ticket #1050): sys/ufs/lfs/lfs_subr.c: revision 1.101 sys/ufs/lfs/lfs_subr.c: revision 1.102 sys/ufs/lfs/lfs_inode.c: revision 1.158 sys/ufs/lfs/lfs_inode.h: revision 1.25 sys/ufs/lfs/lfs_balloc.c: revision 1.95 sys/ufs/lfs/lfs_pages.c: revision 1.21 sys/ufs/lfs/lfs_vnops.c: revision 1.330 sys/ufs/lfs/lfs_alloc.c: revision 1.140 (patch) sys/ufs/lfs/lfs_alloc.c: revision 1.141 (patch) lib/libp2k/p2k.c: revision 1.72 sys/ufs/lfs/lfs.h: revision 1.205 sys/ufs/lfs/lfs.h: revision 1.206 sys/ufs/lfs/lfs_segment.c: revision 1.284 sys/ufs/lfs/lfs.h: revision 1.207 sys/ufs/lfs/lfs_segment.c: revision 1.285 sys/ufs/lfs/lfs_debug.c: revision 1.55 sys/ufs/lfs/lfs_rename.c: revision 1.23 usr.sbin/dumplfs/dumplfs.c: revision 1.65 sys/ufs/lfs/lfs_vfsops.c: revision 1.371 sys/arch/i386/stand/efiboot/bootx64/Makefile: revision 1.3 sys/ufs/lfs/lfs_vfsops.c: revision 1.372 sys/ufs/lfs/lfs_vfsops.c: revision 1.373 sbin/fsck_lfs/pass1.c: revision 1.46 sys/ufs/lfs/lfs_vnops.c: revision 1.326 sys/ufs/lfs/lfs_vnops.c: revision 1.327 sys/ufs/lfs/lfs_vfsops.c: revision 1.375 (patch) sys/ufs/lfs/lfs_vnops.c: revision 1.328 sys/ufs/lfs/lfs_subr.c: revision 1.98 sys/ufs/lfs/lfs_extern.h: revision 1.116 sys/ufs/lfs/lfs_vnops.c: revision 1.329 sys/ufs/lfs/lfs_subr.c: revision 1.99 sys/ufs/lfs/lfs_extern.h: revision 1.117 sys/ufs/lfs/lfs_accessors.h: revision 1.49 sys/ufs/lfs/lfs_extern.h: revision 1.118 sys/rump/fs/lib/liblfs/Makefile: revision 1.15 sys/ufs/lfs/lfs_bio.c: revision 1.146 (patch) sys/ufs/lfs/lfs_bio.c: revision 1.147 sys/ufs/lfs/lfs_subr.c: revision 1.100 Fix kassert in lfs by initializing vp first. Use a marker node to iterate lfs_dchainhd / i_lfs_dchain. I believe elements can be removed while the lock is dropped, including the next node we're hanging on to. Just use VOP_BWRITE for lfs_bwrite_log. Hope this doesn't cause trouble with vfs_suspend. Teach lfs to transition ro<->rw. Prevent new dirops while we issue lfs_flush_dirops. lfs_flush_dirops assumes (by KASSERT((ip->i_state & IN_ADIROP) == 0)) that vnodes on the dchain will not become involved in active dirops even while holding no other locks (lfs_lock, v_interlock), so we must set lfs_writer here. All other callers already set lfs_writer. We set fs->lfs_writer++ without explicitly doing lfs_writer_enter because (a) we already waited for the dirops to drain, and (b) we hold lfs_lock and cannot drop it before setting lfs_writer. Assert lfs_writer where I think we can now prove it. Serialize access to the splay tree with lfs_lock. Change some cheap KDASSERT into KASSERT. Take a reference and fix assertions in lfs_flush_dirops. Fixes panic: KASSERT((ip->i_state & IN_ADIROP) == 0) at lfs_vnops.c:1670 lfs_flush_dirops lfs_check lfs_setattr VOP_SETATTR change_mode sys_fchmod syscall This assertion -- and the assertion that vp->v_uflag has VU_DIROP set -- is valid only until we release lfs_lock, because we may race with lfs_unmark_dirop which will remove the nodes and change the flags. Further, vp itself is valid only as long as it is referenced, which it is as long as it's on the dchain, but lfs_unmark_dirop drops the dchain's reference. Don't lfs_writer_enter while holding v_interlock. There's no need to lfs_writer_enter at all here, as far as I can see. lfs_flush_fs will do it for us. Break deadlock in PR kern/52301. The lock order is lfs_writer -> lfs_seglock. The problem in 52301 is that lfs_segwrite violates this lock order by sometimes doing lfs_seglock -> lfs_writer, either (a) when doing a checkpoint or (b), opportunistically, when there are no dirops pending. Both cases can deadlock, because dirops sometimes take the seglock (lfs_truncate, lfs_valloc, lfs_vfree): (a) There may be dirops pending, and they may be waiting for the seglock, so we can't wait for them to complete while holding the seglock. (b) The test for fs->lfs_dirops == 0 happens unlocked, and the state may change by the time lfs_writer_enter acquires lfs_lock. To resolve this in each case: (a) Do lfs_writer_enter before lfs_seglock, since we will need it unconditionally anyway. The worst performance impact of this should be that some dirops get delayed a little bit. (b) Create a new lfs_writer_tryenter to use at this point so that the test for fs->lfs_dirops == 0 and the acquisition of lfs_writer happen atomically under lfs_lock. Initialize/destroy lfs_allclean_wakeup in modcmd, not lfs_mountfs. Fixes reloading lfs.kmod. In lfs_update, hold lfs_writer around lfs_vflush. Otherwise, we might do lfs_vflush -> lfs_seglock -> lfs_segwait(SEGM_CKP) -> lfs_writer_enter which is the reverse of the lfs_writer -> lfs_seglock ordering. Call lfs_orphan in lfs_rename while we're still in the dirop. lfs_writer_enter can't fail; keep it simple and don't pretend it can. Assert that mtsleep can't fail either -- it doesn't catch signals and there's no timeout. Teach LFS_ORPHAN_NEXTFREE about lfs64. Dust off the orphan detection code and try to make it work. Fix !DIAGNOSTIC compile Fix userland references to LFS_ORPHAN_NEXTFREE. Forgot to grep for these or do a full distribution build, oops! Fix missing <sys/evcnt.h> by removing the evcnts instead. Just wanted to confirm that a race might happen, and indeed it did. These serve little diagnostic value otherwise. OR into bp->b_cflags; don't overwrite. CTASSERT lfs on-disk structure sizes. Avoid misaligned access to lfs64 on-disk records in memory. lfs64 directory entries are only 32-bit aligned in order to conserve space in directory blocks, and we had a hack to stuff a 64-bit inode in them. This replaces the hack by __aligned(4) __packed, and goes further: 1. It's not clear that all the other lfs64 data structures are 64-bit aligned on disk to begin with. We can go through these later and upgrade them from struct foo64 { ... } __aligned(4) __packed; union foo { struct foo64 f64; ... }; to struct foo64 { ... }; union foo { struct foo64 f64 __aligned(8); ... } __aligned(4) __packed; if we really want to take advantage of 64-bit memory accesses. However, the __aligned(4) __packed must remain on the union because: 2. We access even the lfs32 data structures via a union that has lfs64 members, and it turns out that compilers will assume access through a union with 64-bit aligned members implies the whole union has 64-bit alignment, even if we're only accessing a 32-bit aligned member. Fix clang build after packed lfs64 accessor change. Suppress spurious address-of-packed error in rump lfs too. |
| /src/sys/dev/pci/ | |
| viaenv.c | 1.2.4.1 Sun Jul 30 17:54:15 UTC 2000 bouyer Pull up (requested by thorpej): lm_pnpbios.c 1.2->1.3 files 1.374->1.375 nslm7x.c 1.3->1.4 nslm7xvar.h 1.2->1.3 lm_isa.c 1.2->1.3 files.pci 1.96->1.97 viaenv.c 1.2->1.3 sysmon.c 1.1 sysmonvar.h 1.1 Add a clearing-house pseudo-device for system monitoring devices such as the LM78 and VT82C686A (and eventually ACPI). Multiple sensor devices can be hooked registered with `sysmon', and eventually sysmon will also handle hardware (and software) watchdog timers. Convert the `lm' and `viaenv' drivers to the new interface. |
| /src/sys/dev/sysmon/ | |
| sysmon.c | 1.2.2.2 Sun Jul 30 17:54:16 UTC 2000 bouyer Pull up (requested by thorpej): lm_pnpbios.c 1.2->1.3 files 1.374->1.375 nslm7x.c 1.3->1.4 nslm7xvar.h 1.2->1.3 lm_isa.c 1.2->1.3 files.pci 1.96->1.97 viaenv.c 1.2->1.3 sysmon.c 1.1 sysmonvar.h 1.1 Add a clearing-house pseudo-device for system monitoring devices such as the LM78 and VT82C686A (and eventually ACPI). Multiple sensor devices can be hooked registered with `sysmon', and eventually sysmon will also handle hardware (and software) watchdog timers. Convert the `lm' and `viaenv' drivers to the new interface. |
| /src/sys/dev/usb/ | |
| usbdevs_data.h | 1.375 Mon Mar 15 11:16:43 UTC 2004 augustss branches: 1.375.2; Regen. Mon Mar 15 11:16:43 UTC 2004 augustss branches: 1.375.2; Regen. 1.375.2.3 Wed Jul 28 10:38:26 UTC 2004 tron branches: 1.375.2.3.2; Regen for ticket #717. .2.3 Wed Jul 28 10:38:26 UTC 2004 tron branches: 1.375.2.3.2; Regen for ticket #717. 1.375.2.2 Sat Jul 10 13:35:06 UTC 2004 tron Regen for ticket #629. 1.375.2.1 Sat Jul 10 13:30:44 UTC 2004 tron Regen for ticket #629. 1.375.2.3.2.2 Wed Dec 14 04:11:25 UTC 2005 jmc Regen for ticket #10179 1.375.2.3.2.1 Tue May 31 21:00:10 UTC 2005 riz Regen for ticket 1557. |
| /src/lib/libp2k/ | |
| p2k.c | 1.70.14.1 Mon Aug 17 10:30:22 UTC 2020 martin Pull up following revision(s) (requested by riastradh in ticket #1050): sys/ufs/lfs/lfs_subr.c: revision 1.101 sys/ufs/lfs/lfs_subr.c: revision 1.102 sys/ufs/lfs/lfs_inode.c: revision 1.158 sys/ufs/lfs/lfs_inode.h: revision 1.25 sys/ufs/lfs/lfs_balloc.c: revision 1.95 sys/ufs/lfs/lfs_pages.c: revision 1.21 sys/ufs/lfs/lfs_vnops.c: revision 1.330 sys/ufs/lfs/lfs_alloc.c: revision 1.140 (patch) sys/ufs/lfs/lfs_alloc.c: revision 1.141 (patch) lib/libp2k/p2k.c: revision 1.72 sys/ufs/lfs/lfs.h: revision 1.205 sys/ufs/lfs/lfs.h: revision 1.206 sys/ufs/lfs/lfs_segment.c: revision 1.284 sys/ufs/lfs/lfs.h: revision 1.207 sys/ufs/lfs/lfs_segment.c: revision 1.285 sys/ufs/lfs/lfs_debug.c: revision 1.55 sys/ufs/lfs/lfs_rename.c: revision 1.23 usr.sbin/dumplfs/dumplfs.c: revision 1.65 sys/ufs/lfs/lfs_vfsops.c: revision 1.371 sys/arch/i386/stand/efiboot/bootx64/Makefile: revision 1.3 sys/ufs/lfs/lfs_vfsops.c: revision 1.372 sys/ufs/lfs/lfs_vfsops.c: revision 1.373 sbin/fsck_lfs/pass1.c: revision 1.46 sys/ufs/lfs/lfs_vnops.c: revision 1.326 sys/ufs/lfs/lfs_vnops.c: revision 1.327 sys/ufs/lfs/lfs_vfsops.c: revision 1.375 (patch) sys/ufs/lfs/lfs_vnops.c: revision 1.328 sys/ufs/lfs/lfs_subr.c: revision 1.98 sys/ufs/lfs/lfs_extern.h: revision 1.116 sys/ufs/lfs/lfs_vnops.c: revision 1.329 sys/ufs/lfs/lfs_subr.c: revision 1.99 sys/ufs/lfs/lfs_extern.h: revision 1.117 sys/ufs/lfs/lfs_accessors.h: revision 1.49 sys/ufs/lfs/lfs_extern.h: revision 1.118 sys/rump/fs/lib/liblfs/Makefile: revision 1.15 sys/ufs/lfs/lfs_bio.c: revision 1.146 (patch) sys/ufs/lfs/lfs_bio.c: revision 1.147 sys/ufs/lfs/lfs_subr.c: revision 1.100 Fix kassert in lfs by initializing vp first. Use a marker node to iterate lfs_dchainhd / i_lfs_dchain. I believe elements can be removed while the lock is dropped, including the next node we're hanging on to. Just use VOP_BWRITE for lfs_bwrite_log. Hope this doesn't cause trouble with vfs_suspend. Teach lfs to transition ro<->rw. Prevent new dirops while we issue lfs_flush_dirops. lfs_flush_dirops assumes (by KASSERT((ip->i_state & IN_ADIROP) == 0)) that vnodes on the dchain will not become involved in active dirops even while holding no other locks (lfs_lock, v_interlock), so we must set lfs_writer here. All other callers already set lfs_writer. We set fs->lfs_writer++ without explicitly doing lfs_writer_enter because (a) we already waited for the dirops to drain, and (b) we hold lfs_lock and cannot drop it before setting lfs_writer. Assert lfs_writer where I think we can now prove it. Serialize access to the splay tree with lfs_lock. Change some cheap KDASSERT into KASSERT. Take a reference and fix assertions in lfs_flush_dirops. Fixes panic: KASSERT((ip->i_state & IN_ADIROP) == 0) at lfs_vnops.c:1670 lfs_flush_dirops lfs_check lfs_setattr VOP_SETATTR change_mode sys_fchmod syscall This assertion -- and the assertion that vp->v_uflag has VU_DIROP set -- is valid only until we release lfs_lock, because we may race with lfs_unmark_dirop which will remove the nodes and change the flags. Further, vp itself is valid only as long as it is referenced, which it is as long as it's on the dchain, but lfs_unmark_dirop drops the dchain's reference. Don't lfs_writer_enter while holding v_interlock. There's no need to lfs_writer_enter at all here, as far as I can see. lfs_flush_fs will do it for us. Break deadlock in PR kern/52301. The lock order is lfs_writer -> lfs_seglock. The problem in 52301 is that lfs_segwrite violates this lock order by sometimes doing lfs_seglock -> lfs_writer, either (a) when doing a checkpoint or (b), opportunistically, when there are no dirops pending. Both cases can deadlock, because dirops sometimes take the seglock (lfs_truncate, lfs_valloc, lfs_vfree): (a) There may be dirops pending, and they may be waiting for the seglock, so we can't wait for them to complete while holding the seglock. (b) The test for fs->lfs_dirops == 0 happens unlocked, and the state may change by the time lfs_writer_enter acquires lfs_lock. To resolve this in each case: (a) Do lfs_writer_enter before lfs_seglock, since we will need it unconditionally anyway. The worst performance impact of this should be that some dirops get delayed a little bit. (b) Create a new lfs_writer_tryenter to use at this point so that the test for fs->lfs_dirops == 0 and the acquisition of lfs_writer happen atomically under lfs_lock. Initialize/destroy lfs_allclean_wakeup in modcmd, not lfs_mountfs. Fixes reloading lfs.kmod. In lfs_update, hold lfs_writer around lfs_vflush. Otherwise, we might do lfs_vflush -> lfs_seglock -> lfs_segwait(SEGM_CKP) -> lfs_writer_enter which is the reverse of the lfs_writer -> lfs_seglock ordering. Call lfs_orphan in lfs_rename while we're still in the dirop. lfs_writer_enter can't fail; keep it simple and don't pretend it can. Assert that mtsleep can't fail either -- it doesn't catch signals and there's no timeout. Teach LFS_ORPHAN_NEXTFREE about lfs64. Dust off the orphan detection code and try to make it work. Fix !DIAGNOSTIC compile Fix userland references to LFS_ORPHAN_NEXTFREE. Forgot to grep for these or do a full distribution build, oops! Fix missing <sys/evcnt.h> by removing the evcnts instead. Just wanted to confirm that a race might happen, and indeed it did. These serve little diagnostic value otherwise. OR into bp->b_cflags; don't overwrite. CTASSERT lfs on-disk structure sizes. Avoid misaligned access to lfs64 on-disk records in memory. lfs64 directory entries are only 32-bit aligned in order to conserve space in directory blocks, and we had a hack to stuff a 64-bit inode in them. This replaces the hack by __aligned(4) __packed, and goes further: 1. It's not clear that all the other lfs64 data structures are 64-bit aligned on disk to begin with. We can go through these later and upgrade them from struct foo64 { ... } __aligned(4) __packed; union foo { struct foo64 f64; ... }; to struct foo64 { ... }; union foo { struct foo64 f64 __aligned(8); ... } __aligned(4) __packed; if we really want to take advantage of 64-bit memory accesses. However, the __aligned(4) __packed must remain on the union because: 2. We access even the lfs32 data structures via a union that has lfs64 members, and it turns out that compilers will assume access through a union with 64-bit aligned members implies the whole union has 64-bit alignment, even if we're only accessing a 32-bit aligned member. Fix clang build after packed lfs64 accessor change. Suppress spurious address-of-packed error in rump lfs too. |
| /src/sbin/fsck_lfs/ | |
| pass1.c | 1.45.18.1 Mon Aug 17 10:30:22 UTC 2020 martin Pull up following revision(s) (requested by riastradh in ticket #1050): sys/ufs/lfs/lfs_subr.c: revision 1.101 sys/ufs/lfs/lfs_subr.c: revision 1.102 sys/ufs/lfs/lfs_inode.c: revision 1.158 sys/ufs/lfs/lfs_inode.h: revision 1.25 sys/ufs/lfs/lfs_balloc.c: revision 1.95 sys/ufs/lfs/lfs_pages.c: revision 1.21 sys/ufs/lfs/lfs_vnops.c: revision 1.330 sys/ufs/lfs/lfs_alloc.c: revision 1.140 (patch) sys/ufs/lfs/lfs_alloc.c: revision 1.141 (patch) lib/libp2k/p2k.c: revision 1.72 sys/ufs/lfs/lfs.h: revision 1.205 sys/ufs/lfs/lfs.h: revision 1.206 sys/ufs/lfs/lfs_segment.c: revision 1.284 sys/ufs/lfs/lfs.h: revision 1.207 sys/ufs/lfs/lfs_segment.c: revision 1.285 sys/ufs/lfs/lfs_debug.c: revision 1.55 sys/ufs/lfs/lfs_rename.c: revision 1.23 usr.sbin/dumplfs/dumplfs.c: revision 1.65 sys/ufs/lfs/lfs_vfsops.c: revision 1.371 sys/arch/i386/stand/efiboot/bootx64/Makefile: revision 1.3 sys/ufs/lfs/lfs_vfsops.c: revision 1.372 sys/ufs/lfs/lfs_vfsops.c: revision 1.373 sbin/fsck_lfs/pass1.c: revision 1.46 sys/ufs/lfs/lfs_vnops.c: revision 1.326 sys/ufs/lfs/lfs_vnops.c: revision 1.327 sys/ufs/lfs/lfs_vfsops.c: revision 1.375 (patch) sys/ufs/lfs/lfs_vnops.c: revision 1.328 sys/ufs/lfs/lfs_subr.c: revision 1.98 sys/ufs/lfs/lfs_extern.h: revision 1.116 sys/ufs/lfs/lfs_vnops.c: revision 1.329 sys/ufs/lfs/lfs_subr.c: revision 1.99 sys/ufs/lfs/lfs_extern.h: revision 1.117 sys/ufs/lfs/lfs_accessors.h: revision 1.49 sys/ufs/lfs/lfs_extern.h: revision 1.118 sys/rump/fs/lib/liblfs/Makefile: revision 1.15 sys/ufs/lfs/lfs_bio.c: revision 1.146 (patch) sys/ufs/lfs/lfs_bio.c: revision 1.147 sys/ufs/lfs/lfs_subr.c: revision 1.100 Fix kassert in lfs by initializing vp first. Use a marker node to iterate lfs_dchainhd / i_lfs_dchain. I believe elements can be removed while the lock is dropped, including the next node we're hanging on to. Just use VOP_BWRITE for lfs_bwrite_log. Hope this doesn't cause trouble with vfs_suspend. Teach lfs to transition ro<->rw. Prevent new dirops while we issue lfs_flush_dirops. lfs_flush_dirops assumes (by KASSERT((ip->i_state & IN_ADIROP) == 0)) that vnodes on the dchain will not become involved in active dirops even while holding no other locks (lfs_lock, v_interlock), so we must set lfs_writer here. All other callers already set lfs_writer. We set fs->lfs_writer++ without explicitly doing lfs_writer_enter because (a) we already waited for the dirops to drain, and (b) we hold lfs_lock and cannot drop it before setting lfs_writer. Assert lfs_writer where I think we can now prove it. Serialize access to the splay tree with lfs_lock. Change some cheap KDASSERT into KASSERT. Take a reference and fix assertions in lfs_flush_dirops. Fixes panic: KASSERT((ip->i_state & IN_ADIROP) == 0) at lfs_vnops.c:1670 lfs_flush_dirops lfs_check lfs_setattr VOP_SETATTR change_mode sys_fchmod syscall This assertion -- and the assertion that vp->v_uflag has VU_DIROP set -- is valid only until we release lfs_lock, because we may race with lfs_unmark_dirop which will remove the nodes and change the flags. Further, vp itself is valid only as long as it is referenced, which it is as long as it's on the dchain, but lfs_unmark_dirop drops the dchain's reference. Don't lfs_writer_enter while holding v_interlock. There's no need to lfs_writer_enter at all here, as far as I can see. lfs_flush_fs will do it for us. Break deadlock in PR kern/52301. The lock order is lfs_writer -> lfs_seglock. The problem in 52301 is that lfs_segwrite violates this lock order by sometimes doing lfs_seglock -> lfs_writer, either (a) when doing a checkpoint or (b), opportunistically, when there are no dirops pending. Both cases can deadlock, because dirops sometimes take the seglock (lfs_truncate, lfs_valloc, lfs_vfree): (a) There may be dirops pending, and they may be waiting for the seglock, so we can't wait for them to complete while holding the seglock. (b) The test for fs->lfs_dirops == 0 happens unlocked, and the state may change by the time lfs_writer_enter acquires lfs_lock. To resolve this in each case: (a) Do lfs_writer_enter before lfs_seglock, since we will need it unconditionally anyway. The worst performance impact of this should be that some dirops get delayed a little bit. (b) Create a new lfs_writer_tryenter to use at this point so that the test for fs->lfs_dirops == 0 and the acquisition of lfs_writer happen atomically under lfs_lock. Initialize/destroy lfs_allclean_wakeup in modcmd, not lfs_mountfs. Fixes reloading lfs.kmod. In lfs_update, hold lfs_writer around lfs_vflush. Otherwise, we might do lfs_vflush -> lfs_seglock -> lfs_segwait(SEGM_CKP) -> lfs_writer_enter which is the reverse of the lfs_writer -> lfs_seglock ordering. Call lfs_orphan in lfs_rename while we're still in the dirop. lfs_writer_enter can't fail; keep it simple and don't pretend it can. Assert that mtsleep can't fail either -- it doesn't catch signals and there's no timeout. Teach LFS_ORPHAN_NEXTFREE about lfs64. Dust off the orphan detection code and try to make it work. Fix !DIAGNOSTIC compile Fix userland references to LFS_ORPHAN_NEXTFREE. Forgot to grep for these or do a full distribution build, oops! Fix missing <sys/evcnt.h> by removing the evcnts instead. Just wanted to confirm that a race might happen, and indeed it did. These serve little diagnostic value otherwise. OR into bp->b_cflags; don't overwrite. CTASSERT lfs on-disk structure sizes. Avoid misaligned access to lfs64 on-disk records in memory. lfs64 directory entries are only 32-bit aligned in order to conserve space in directory blocks, and we had a hack to stuff a 64-bit inode in them. This replaces the hack by __aligned(4) __packed, and goes further: 1. It's not clear that all the other lfs64 data structures are 64-bit aligned on disk to begin with. We can go through these later and upgrade them from struct foo64 { ... } __aligned(4) __packed; union foo { struct foo64 f64; ... }; to struct foo64 { ... }; union foo { struct foo64 f64 __aligned(8); ... } __aligned(4) __packed; if we really want to take advantage of 64-bit memory accesses. However, the __aligned(4) __packed must remain on the union because: 2. We access even the lfs32 data structures via a union that has lfs64 members, and it turns out that compilers will assume access through a union with 64-bit aligned members implies the whole union has 64-bit alignment, even if we're only accessing a 32-bit aligned member. Fix clang build after packed lfs64 accessor change. Suppress spurious address-of-packed error in rump lfs too. |
| /src/sys/dev/ic/ | |
| nslm7xvar.h | 1.2.4.1 Sun Jul 30 17:54:14 UTC 2000 bouyer Pull up (requested by thorpej): lm_pnpbios.c 1.2->1.3 files 1.374->1.375 nslm7x.c 1.3->1.4 nslm7xvar.h 1.2->1.3 lm_isa.c 1.2->1.3 files.pci 1.96->1.97 viaenv.c 1.2->1.3 sysmon.c 1.1 sysmonvar.h 1.1 Add a clearing-house pseudo-device for system monitoring devices such as the LM78 and VT82C686A (and eventually ACPI). Multiple sensor devices can be hooked registered with `sysmon', and eventually sysmon will also handle hardware (and software) watchdog timers. Convert the `lm' and `viaenv' drivers to the new interface. |
| /src/sys/dev/pci/ixgbe/ | |
| ixgbe_82598.h | 1.2.4.2 Sun Apr 19 14:42:14 UTC 2015 riz Apply patch (requested by msaitoh in ticket #697): sys/dev/pci/files.pci 1.375 via patch sys/dev/pci/ixgbe/ixgbe.c 1.24-1.27 via patch sys/dev/pci/ixgbe/ixgbe.h 1.4-1.6 via patch sys/dev/pci/ixgbe/ixgbe_82598.c 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_82598.h 1.1-1.2 via patch sys/dev/pci/ixgbe/ixgbe_82599.c 1.6-1.8 via patch sys/dev/pci/ixgbe/ixgbe_82599.h 1.1 via patch sys/dev/pci/ixgbe/ixgbe_api.c 1.5-1.6 via patch sys/dev/pci/ixgbe/ixgbe_api.h 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_common.c 1.3-1.4 via patch sys/dev/pci/ixgbe/ixgbe_common.h 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_mbx.c 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_mbx.h 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_osdep.h 1.4-1.6 via patch sys/dev/pci/ixgbe/ixgbe_phy.c 1.3-1.4 via patch sys/dev/pci/ixgbe/ixgbe_phy.h 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_type.h 1.8-1.9 via patch sys/dev/pci/ixgbe/ixgbe_vf.c 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_vf.h 1.3-1.4 via patch sys/dev/pci/ixgbe/ixgbe_x540.c 1.1-1.2 via patch sys/dev/pci/ixgbe/ixgbe_x540.h 1.1 via patch sys/dev/pci/ixgbe/ixv.c 1.5-1.7 via patch sys/dev/pci/ixgbe/ixv.h 1.4-1.5 via patch Synchronize our ixg(4) driver up to FreeBSD r243716: - Add X540 support. - Add TSO6 support. - Add 100BaseTX support. - The max size in dma tag is changed from 65535 to 262140 (IXGBE_TSO_SIZE). The value is the same as other *BSDs. The change might cause a address space shortage (ixgbe_dmamap_create() might fail) on some machines. - Show 1000Base-SX correctly. - Fix if_baudrate from 1G to 10G. - Fix a bug that ifconfig -z (SOICZIFDATA) doesn't work. - Fix a lot of bugs. - Improve performance. [msaitoh, ticket #697] |
| ixgbe_82599.h | 1.1.4.2 Sun Apr 19 14:42:14 UTC 2015 riz Apply patch (requested by msaitoh in ticket #697): sys/dev/pci/files.pci 1.375 via patch sys/dev/pci/ixgbe/ixgbe.c 1.24-1.27 via patch sys/dev/pci/ixgbe/ixgbe.h 1.4-1.6 via patch sys/dev/pci/ixgbe/ixgbe_82598.c 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_82598.h 1.1-1.2 via patch sys/dev/pci/ixgbe/ixgbe_82599.c 1.6-1.8 via patch sys/dev/pci/ixgbe/ixgbe_82599.h 1.1 via patch sys/dev/pci/ixgbe/ixgbe_api.c 1.5-1.6 via patch sys/dev/pci/ixgbe/ixgbe_api.h 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_common.c 1.3-1.4 via patch sys/dev/pci/ixgbe/ixgbe_common.h 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_mbx.c 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_mbx.h 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_osdep.h 1.4-1.6 via patch sys/dev/pci/ixgbe/ixgbe_phy.c 1.3-1.4 via patch sys/dev/pci/ixgbe/ixgbe_phy.h 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_type.h 1.8-1.9 via patch sys/dev/pci/ixgbe/ixgbe_vf.c 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_vf.h 1.3-1.4 via patch sys/dev/pci/ixgbe/ixgbe_x540.c 1.1-1.2 via patch sys/dev/pci/ixgbe/ixgbe_x540.h 1.1 via patch sys/dev/pci/ixgbe/ixv.c 1.5-1.7 via patch sys/dev/pci/ixgbe/ixv.h 1.4-1.5 via patch Synchronize our ixg(4) driver up to FreeBSD r243716: - Add X540 support. - Add TSO6 support. - Add 100BaseTX support. - The max size in dma tag is changed from 65535 to 262140 (IXGBE_TSO_SIZE). The value is the same as other *BSDs. The change might cause a address space shortage (ixgbe_dmamap_create() might fail) on some machines. - Show 1000Base-SX correctly. - Fix if_baudrate from 1G to 10G. - Fix a bug that ifconfig -z (SOICZIFDATA) doesn't work. - Fix a lot of bugs. - Improve performance. [msaitoh, ticket #697] |
| ixgbe_phy.h | 1.1.28.1 Sun Apr 19 06:45:17 UTC 2015 riz Apply patch (requested by msaitoh in ticket #697): sys/dev/pci/files.pci 1.375 via patch sys/dev/pci/ixgbe/ixgbe.c 1.24-1.27 via patch sys/dev/pci/ixgbe/ixgbe.h 1.4-1.6 via patch sys/dev/pci/ixgbe/ixgbe_82598.c 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_82598.h 1.1-1.2 via patch sys/dev/pci/ixgbe/ixgbe_82599.c 1.6-1.8 via patch sys/dev/pci/ixgbe/ixgbe_82599.h 1.1 via patch sys/dev/pci/ixgbe/ixgbe_api.c 1.5-1.6 via patch sys/dev/pci/ixgbe/ixgbe_api.h 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_common.c 1.3-1.4 via patch sys/dev/pci/ixgbe/ixgbe_common.h 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_mbx.c 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_mbx.h 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_osdep.h 1.4-1.6 via patch sys/dev/pci/ixgbe/ixgbe_phy.c 1.3-1.4 via patch sys/dev/pci/ixgbe/ixgbe_phy.h 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_type.h 1.8-1.9 via patch sys/dev/pci/ixgbe/ixgbe_vf.c 1.2-1.3 via patch sys/dev/pci/ixgbe/ixgbe_vf.h 1.3-1.4 via patch sys/dev/pci/ixgbe/ixgbe_x540.c 1.1-1.2 via patch sys/dev/pci/ixgbe/ixgbe_x540.h 1.1 via patch sys/dev/pci/ixgbe/ixv.c 1.5-1.7 via patch sys/dev/pci/ixgbe/ixv.h 1.4-1.5 via patch Synchronize our ixg(4) driver up to FreeBSD r243716: - Add X540 support. - Add TSO6 support. - Add 100BaseTX support. - The max size in dma tag is changed from 65535 to 262140 (IXGBE_TSO_SIZE). The value is the same as other *BSDs. The change might cause a address space shortage (ixgbe_dmamap_create() might fail) on some machines. - Show 1000Base-SX correctly. - Fix if_baudrate from 1G to 10G. - Fix a bug that ifconfig -z (SOICZIFDATA) doesn't work. - Fix a lot of bugs. - Improve performance. [msaitoh, ticket #697] |
| /src/sys/fs/adosfs/ | |
| advnops.c | 1.31 Tue Dec 16 16:18:25 UTC 2008 pooka branches: 1.31.2; The great QUOTA purge of '08: get rid of those #ifdef QUOTA and #include "opt_quota.h" which do exactly nothing. Speeds up kernel compilation by 1.375*10^-20001 seconds. But leave the most moxious comment in msdosfs_vfsops untouched. |
| /src/sys/ufs/lfs/ | |
| lfs_accessors.h | 1.48.12.1 Mon Aug 17 10:30:22 UTC 2020 martin Pull up following revision(s) (requested by riastradh in ticket #1050): sys/ufs/lfs/lfs_subr.c: revision 1.101 sys/ufs/lfs/lfs_subr.c: revision 1.102 sys/ufs/lfs/lfs_inode.c: revision 1.158 sys/ufs/lfs/lfs_inode.h: revision 1.25 sys/ufs/lfs/lfs_balloc.c: revision 1.95 sys/ufs/lfs/lfs_pages.c: revision 1.21 sys/ufs/lfs/lfs_vnops.c: revision 1.330 sys/ufs/lfs/lfs_alloc.c: revision 1.140 (patch) sys/ufs/lfs/lfs_alloc.c: revision 1.141 (patch) lib/libp2k/p2k.c: revision 1.72 sys/ufs/lfs/lfs.h: revision 1.205 sys/ufs/lfs/lfs.h: revision 1.206 sys/ufs/lfs/lfs_segment.c: revision 1.284 sys/ufs/lfs/lfs.h: revision 1.207 sys/ufs/lfs/lfs_segment.c: revision 1.285 sys/ufs/lfs/lfs_debug.c: revision 1.55 sys/ufs/lfs/lfs_rename.c: revision 1.23 usr.sbin/dumplfs/dumplfs.c: revision 1.65 sys/ufs/lfs/lfs_vfsops.c: revision 1.371 sys/arch/i386/stand/efiboot/bootx64/Makefile: revision 1.3 sys/ufs/lfs/lfs_vfsops.c: revision 1.372 sys/ufs/lfs/lfs_vfsops.c: revision 1.373 sbin/fsck_lfs/pass1.c: revision 1.46 sys/ufs/lfs/lfs_vnops.c: revision 1.326 sys/ufs/lfs/lfs_vnops.c: revision 1.327 sys/ufs/lfs/lfs_vfsops.c: revision 1.375 (patch) sys/ufs/lfs/lfs_vnops.c: revision 1.328 sys/ufs/lfs/lfs_subr.c: revision 1.98 sys/ufs/lfs/lfs_extern.h: revision 1.116 sys/ufs/lfs/lfs_vnops.c: revision 1.329 sys/ufs/lfs/lfs_subr.c: revision 1.99 sys/ufs/lfs/lfs_extern.h: revision 1.117 sys/ufs/lfs/lfs_accessors.h: revision 1.49 sys/ufs/lfs/lfs_extern.h: revision 1.118 sys/rump/fs/lib/liblfs/Makefile: revision 1.15 sys/ufs/lfs/lfs_bio.c: revision 1.146 (patch) sys/ufs/lfs/lfs_bio.c: revision 1.147 sys/ufs/lfs/lfs_subr.c: revision 1.100 Fix kassert in lfs by initializing vp first. Use a marker node to iterate lfs_dchainhd / i_lfs_dchain. I believe elements can be removed while the lock is dropped, including the next node we're hanging on to. Just use VOP_BWRITE for lfs_bwrite_log. Hope this doesn't cause trouble with vfs_suspend. Teach lfs to transition ro<->rw. Prevent new dirops while we issue lfs_flush_dirops. lfs_flush_dirops assumes (by KASSERT((ip->i_state & IN_ADIROP) == 0)) that vnodes on the dchain will not become involved in active dirops even while holding no other locks (lfs_lock, v_interlock), so we must set lfs_writer here. All other callers already set lfs_writer. We set fs->lfs_writer++ without explicitly doing lfs_writer_enter because (a) we already waited for the dirops to drain, and (b) we hold lfs_lock and cannot drop it before setting lfs_writer. Assert lfs_writer where I think we can now prove it. Serialize access to the splay tree with lfs_lock. Change some cheap KDASSERT into KASSERT. Take a reference and fix assertions in lfs_flush_dirops. Fixes panic: KASSERT((ip->i_state & IN_ADIROP) == 0) at lfs_vnops.c:1670 lfs_flush_dirops lfs_check lfs_setattr VOP_SETATTR change_mode sys_fchmod syscall This assertion -- and the assertion that vp->v_uflag has VU_DIROP set -- is valid only until we release lfs_lock, because we may race with lfs_unmark_dirop which will remove the nodes and change the flags. Further, vp itself is valid only as long as it is referenced, which it is as long as it's on the dchain, but lfs_unmark_dirop drops the dchain's reference. Don't lfs_writer_enter while holding v_interlock. There's no need to lfs_writer_enter at all here, as far as I can see. lfs_flush_fs will do it for us. Break deadlock in PR kern/52301. The lock order is lfs_writer -> lfs_seglock. The problem in 52301 is that lfs_segwrite violates this lock order by sometimes doing lfs_seglock -> lfs_writer, either (a) when doing a checkpoint or (b), opportunistically, when there are no dirops pending. Both cases can deadlock, because dirops sometimes take the seglock (lfs_truncate, lfs_valloc, lfs_vfree): (a) There may be dirops pending, and they may be waiting for the seglock, so we can't wait for them to complete while holding the seglock. (b) The test for fs->lfs_dirops == 0 happens unlocked, and the state may change by the time lfs_writer_enter acquires lfs_lock. To resolve this in each case: (a) Do lfs_writer_enter before lfs_seglock, since we will need it unconditionally anyway. The worst performance impact of this should be that some dirops get delayed a little bit. (b) Create a new lfs_writer_tryenter to use at this point so that the test for fs->lfs_dirops == 0 and the acquisition of lfs_writer happen atomically under lfs_lock. Initialize/destroy lfs_allclean_wakeup in modcmd, not lfs_mountfs. Fixes reloading lfs.kmod. In lfs_update, hold lfs_writer around lfs_vflush. Otherwise, we might do lfs_vflush -> lfs_seglock -> lfs_segwait(SEGM_CKP) -> lfs_writer_enter which is the reverse of the lfs_writer -> lfs_seglock ordering. Call lfs_orphan in lfs_rename while we're still in the dirop. lfs_writer_enter can't fail; keep it simple and don't pretend it can. Assert that mtsleep can't fail either -- it doesn't catch signals and there's no timeout. Teach LFS_ORPHAN_NEXTFREE about lfs64. Dust off the orphan detection code and try to make it work. Fix !DIAGNOSTIC compile Fix userland references to LFS_ORPHAN_NEXTFREE. Forgot to grep for these or do a full distribution build, oops! Fix missing <sys/evcnt.h> by removing the evcnts instead. Just wanted to confirm that a race might happen, and indeed it did. These serve little diagnostic value otherwise. OR into bp->b_cflags; don't overwrite. CTASSERT lfs on-disk structure sizes. Avoid misaligned access to lfs64 on-disk records in memory. lfs64 directory entries are only 32-bit aligned in order to conserve space in directory blocks, and we had a hack to stuff a 64-bit inode in them. This replaces the hack by __aligned(4) __packed, and goes further: 1. It's not clear that all the other lfs64 data structures are 64-bit aligned on disk to begin with. We can go through these later and upgrade them from struct foo64 { ... } __aligned(4) __packed; union foo { struct foo64 f64; ... }; to struct foo64 { ... }; union foo { struct foo64 f64 __aligned(8); ... } __aligned(4) __packed; if we really want to take advantage of 64-bit memory accesses. However, the __aligned(4) __packed must remain on the union because: 2. We access even the lfs32 data structures via a union that has lfs64 members, and it turns out that compilers will assume access through a union with 64-bit aligned members implies the whole union has 64-bit alignment, even if we're only accessing a 32-bit aligned member. Fix clang build after packed lfs64 accessor change. Suppress spurious address-of-packed error in rump lfs too. |
| lfs_inode.h | 1.23.10.1 Mon Aug 17 10:30:22 UTC 2020 martin Pull up following revision(s) (requested by riastradh in ticket #1050): sys/ufs/lfs/lfs_subr.c: revision 1.101 sys/ufs/lfs/lfs_subr.c: revision 1.102 sys/ufs/lfs/lfs_inode.c: revision 1.158 sys/ufs/lfs/lfs_inode.h: revision 1.25 sys/ufs/lfs/lfs_balloc.c: revision 1.95 sys/ufs/lfs/lfs_pages.c: revision 1.21 sys/ufs/lfs/lfs_vnops.c: revision 1.330 sys/ufs/lfs/lfs_alloc.c: revision 1.140 (patch) sys/ufs/lfs/lfs_alloc.c: revision 1.141 (patch) lib/libp2k/p2k.c: revision 1.72 sys/ufs/lfs/lfs.h: revision 1.205 sys/ufs/lfs/lfs.h: revision 1.206 sys/ufs/lfs/lfs_segment.c: revision 1.284 sys/ufs/lfs/lfs.h: revision 1.207 sys/ufs/lfs/lfs_segment.c: revision 1.285 sys/ufs/lfs/lfs_debug.c: revision 1.55 sys/ufs/lfs/lfs_rename.c: revision 1.23 usr.sbin/dumplfs/dumplfs.c: revision 1.65 sys/ufs/lfs/lfs_vfsops.c: revision 1.371 sys/arch/i386/stand/efiboot/bootx64/Makefile: revision 1.3 sys/ufs/lfs/lfs_vfsops.c: revision 1.372 sys/ufs/lfs/lfs_vfsops.c: revision 1.373 sbin/fsck_lfs/pass1.c: revision 1.46 sys/ufs/lfs/lfs_vnops.c: revision 1.326 sys/ufs/lfs/lfs_vnops.c: revision 1.327 sys/ufs/lfs/lfs_vfsops.c: revision 1.375 (patch) sys/ufs/lfs/lfs_vnops.c: revision 1.328 sys/ufs/lfs/lfs_subr.c: revision 1.98 sys/ufs/lfs/lfs_extern.h: revision 1.116 sys/ufs/lfs/lfs_vnops.c: revision 1.329 sys/ufs/lfs/lfs_subr.c: revision 1.99 sys/ufs/lfs/lfs_extern.h: revision 1.117 sys/ufs/lfs/lfs_accessors.h: revision 1.49 sys/ufs/lfs/lfs_extern.h: revision 1.118 sys/rump/fs/lib/liblfs/Makefile: revision 1.15 sys/ufs/lfs/lfs_bio.c: revision 1.146 (patch) sys/ufs/lfs/lfs_bio.c: revision 1.147 sys/ufs/lfs/lfs_subr.c: revision 1.100 Fix kassert in lfs by initializing vp first. Use a marker node to iterate lfs_dchainhd / i_lfs_dchain. I believe elements can be removed while the lock is dropped, including the next node we're hanging on to. Just use VOP_BWRITE for lfs_bwrite_log. Hope this doesn't cause trouble with vfs_suspend. Teach lfs to transition ro<->rw. Prevent new dirops while we issue lfs_flush_dirops. lfs_flush_dirops assumes (by KASSERT((ip->i_state & IN_ADIROP) == 0)) that vnodes on the dchain will not become involved in active dirops even while holding no other locks (lfs_lock, v_interlock), so we must set lfs_writer here. All other callers already set lfs_writer. We set fs->lfs_writer++ without explicitly doing lfs_writer_enter because (a) we already waited for the dirops to drain, and (b) we hold lfs_lock and cannot drop it before setting lfs_writer. Assert lfs_writer where I think we can now prove it. Serialize access to the splay tree with lfs_lock. Change some cheap KDASSERT into KASSERT. Take a reference and fix assertions in lfs_flush_dirops. Fixes panic: KASSERT((ip->i_state & IN_ADIROP) == 0) at lfs_vnops.c:1670 lfs_flush_dirops lfs_check lfs_setattr VOP_SETATTR change_mode sys_fchmod syscall This assertion -- and the assertion that vp->v_uflag has VU_DIROP set -- is valid only until we release lfs_lock, because we may race with lfs_unmark_dirop which will remove the nodes and change the flags. Further, vp itself is valid only as long as it is referenced, which it is as long as it's on the dchain, but lfs_unmark_dirop drops the dchain's reference. Don't lfs_writer_enter while holding v_interlock. There's no need to lfs_writer_enter at all here, as far as I can see. lfs_flush_fs will do it for us. Break deadlock in PR kern/52301. The lock order is lfs_writer -> lfs_seglock. The problem in 52301 is that lfs_segwrite violates this lock order by sometimes doing lfs_seglock -> lfs_writer, either (a) when doing a checkpoint or (b), opportunistically, when there are no dirops pending. Both cases can deadlock, because dirops sometimes take the seglock (lfs_truncate, lfs_valloc, lfs_vfree): (a) There may be dirops pending, and they may be waiting for the seglock, so we can't wait for them to complete while holding the seglock. (b) The test for fs->lfs_dirops == 0 happens unlocked, and the state may change by the time lfs_writer_enter acquires lfs_lock. To resolve this in each case: (a) Do lfs_writer_enter before lfs_seglock, since we will need it unconditionally anyway. The worst performance impact of this should be that some dirops get delayed a little bit. (b) Create a new lfs_writer_tryenter to use at this point so that the test for fs->lfs_dirops == 0 and the acquisition of lfs_writer happen atomically under lfs_lock. Initialize/destroy lfs_allclean_wakeup in modcmd, not lfs_mountfs. Fixes reloading lfs.kmod. In lfs_update, hold lfs_writer around lfs_vflush. Otherwise, we might do lfs_vflush -> lfs_seglock -> lfs_segwait(SEGM_CKP) -> lfs_writer_enter which is the reverse of the lfs_writer -> lfs_seglock ordering. Call lfs_orphan in lfs_rename while we're still in the dirop. lfs_writer_enter can't fail; keep it simple and don't pretend it can. Assert that mtsleep can't fail either -- it doesn't catch signals and there's no timeout. Teach LFS_ORPHAN_NEXTFREE about lfs64. Dust off the orphan detection code and try to make it work. Fix !DIAGNOSTIC compile Fix userland references to LFS_ORPHAN_NEXTFREE. Forgot to grep for these or do a full distribution build, oops! Fix missing <sys/evcnt.h> by removing the evcnts instead. Just wanted to confirm that a race might happen, and indeed it did. These serve little diagnostic value otherwise. OR into bp->b_cflags; don't overwrite. CTASSERT lfs on-disk structure sizes. Avoid misaligned access to lfs64 on-disk records in memory. lfs64 directory entries are only 32-bit aligned in order to conserve space in directory blocks, and we had a hack to stuff a 64-bit inode in them. This replaces the hack by __aligned(4) __packed, and goes further: 1. It's not clear that all the other lfs64 data structures are 64-bit aligned on disk to begin with. We can go through these later and upgrade them from struct foo64 { ... } __aligned(4) __packed; union foo { struct foo64 f64; ... }; to struct foo64 { ... }; union foo { struct foo64 f64 __aligned(8); ... } __aligned(4) __packed; if we really want to take advantage of 64-bit memory accesses. However, the __aligned(4) __packed must remain on the union because: 2. We access even the lfs32 data structures via a union that has lfs64 members, and it turns out that compilers will assume access through a union with 64-bit aligned members implies the whole union has 64-bit alignment, even if we're only accessing a 32-bit aligned member. Fix clang build after packed lfs64 accessor change. Suppress spurious address-of-packed error in rump lfs too. |
| lfs_pages.c | 1.15.8.1 Mon Aug 17 10:30:22 UTC 2020 martin Pull up following revision(s) (requested by riastradh in ticket #1050): sys/ufs/lfs/lfs_subr.c: revision 1.101 sys/ufs/lfs/lfs_subr.c: revision 1.102 sys/ufs/lfs/lfs_inode.c: revision 1.158 sys/ufs/lfs/lfs_inode.h: revision 1.25 sys/ufs/lfs/lfs_balloc.c: revision 1.95 sys/ufs/lfs/lfs_pages.c: revision 1.21 sys/ufs/lfs/lfs_vnops.c: revision 1.330 sys/ufs/lfs/lfs_alloc.c: revision 1.140 (patch) sys/ufs/lfs/lfs_alloc.c: revision 1.141 (patch) lib/libp2k/p2k.c: revision 1.72 sys/ufs/lfs/lfs.h: revision 1.205 sys/ufs/lfs/lfs.h: revision 1.206 sys/ufs/lfs/lfs_segment.c: revision 1.284 sys/ufs/lfs/lfs.h: revision 1.207 sys/ufs/lfs/lfs_segment.c: revision 1.285 sys/ufs/lfs/lfs_debug.c: revision 1.55 sys/ufs/lfs/lfs_rename.c: revision 1.23 usr.sbin/dumplfs/dumplfs.c: revision 1.65 sys/ufs/lfs/lfs_vfsops.c: revision 1.371 sys/arch/i386/stand/efiboot/bootx64/Makefile: revision 1.3 sys/ufs/lfs/lfs_vfsops.c: revision 1.372 sys/ufs/lfs/lfs_vfsops.c: revision 1.373 sbin/fsck_lfs/pass1.c: revision 1.46 sys/ufs/lfs/lfs_vnops.c: revision 1.326 sys/ufs/lfs/lfs_vnops.c: revision 1.327 sys/ufs/lfs/lfs_vfsops.c: revision 1.375 (patch) sys/ufs/lfs/lfs_vnops.c: revision 1.328 sys/ufs/lfs/lfs_subr.c: revision 1.98 sys/ufs/lfs/lfs_extern.h: revision 1.116 sys/ufs/lfs/lfs_vnops.c: revision 1.329 sys/ufs/lfs/lfs_subr.c: revision 1.99 sys/ufs/lfs/lfs_extern.h: revision 1.117 sys/ufs/lfs/lfs_accessors.h: revision 1.49 sys/ufs/lfs/lfs_extern.h: revision 1.118 sys/rump/fs/lib/liblfs/Makefile: revision 1.15 sys/ufs/lfs/lfs_bio.c: revision 1.146 (patch) sys/ufs/lfs/lfs_bio.c: revision 1.147 sys/ufs/lfs/lfs_subr.c: revision 1.100 Fix kassert in lfs by initializing vp first. Use a marker node to iterate lfs_dchainhd / i_lfs_dchain. I believe elements can be removed while the lock is dropped, including the next node we're hanging on to. Just use VOP_BWRITE for lfs_bwrite_log. Hope this doesn't cause trouble with vfs_suspend. Teach lfs to transition ro<->rw. Prevent new dirops while we issue lfs_flush_dirops. lfs_flush_dirops assumes (by KASSERT((ip->i_state & IN_ADIROP) == 0)) that vnodes on the dchain will not become involved in active dirops even while holding no other locks (lfs_lock, v_interlock), so we must set lfs_writer here. All other callers already set lfs_writer. We set fs->lfs_writer++ without explicitly doing lfs_writer_enter because (a) we already waited for the dirops to drain, and (b) we hold lfs_lock and cannot drop it before setting lfs_writer. Assert lfs_writer where I think we can now prove it. Serialize access to the splay tree with lfs_lock. Change some cheap KDASSERT into KASSERT. Take a reference and fix assertions in lfs_flush_dirops. Fixes panic: KASSERT((ip->i_state & IN_ADIROP) == 0) at lfs_vnops.c:1670 lfs_flush_dirops lfs_check lfs_setattr VOP_SETATTR change_mode sys_fchmod syscall This assertion -- and the assertion that vp->v_uflag has VU_DIROP set -- is valid only until we release lfs_lock, because we may race with lfs_unmark_dirop which will remove the nodes and change the flags. Further, vp itself is valid only as long as it is referenced, which it is as long as it's on the dchain, but lfs_unmark_dirop drops the dchain's reference. Don't lfs_writer_enter while holding v_interlock. There's no need to lfs_writer_enter at all here, as far as I can see. lfs_flush_fs will do it for us. Break deadlock in PR kern/52301. The lock order is lfs_writer -> lfs_seglock. The problem in 52301 is that lfs_segwrite violates this lock order by sometimes doing lfs_seglock -> lfs_writer, either (a) when doing a checkpoint or (b), opportunistically, when there are no dirops pending. Both cases can deadlock, because dirops sometimes take the seglock (lfs_truncate, lfs_valloc, lfs_vfree): (a) There may be dirops pending, and they may be waiting for the seglock, so we can't wait for them to complete while holding the seglock. (b) The test for fs->lfs_dirops == 0 happens unlocked, and the state may change by the time lfs_writer_enter acquires lfs_lock. To resolve this in each case: (a) Do lfs_writer_enter before lfs_seglock, since we will need it unconditionally anyway. The worst performance impact of this should be that some dirops get delayed a little bit. (b) Create a new lfs_writer_tryenter to use at this point so that the test for fs->lfs_dirops == 0 and the acquisition of lfs_writer happen atomically under lfs_lock. Initialize/destroy lfs_allclean_wakeup in modcmd, not lfs_mountfs. Fixes reloading lfs.kmod. In lfs_update, hold lfs_writer around lfs_vflush. Otherwise, we might do lfs_vflush -> lfs_seglock -> lfs_segwait(SEGM_CKP) -> lfs_writer_enter which is the reverse of the lfs_writer -> lfs_seglock ordering. Call lfs_orphan in lfs_rename while we're still in the dirop. lfs_writer_enter can't fail; keep it simple and don't pretend it can. Assert that mtsleep can't fail either -- it doesn't catch signals and there's no timeout. Teach LFS_ORPHAN_NEXTFREE about lfs64. Dust off the orphan detection code and try to make it work. Fix !DIAGNOSTIC compile Fix userland references to LFS_ORPHAN_NEXTFREE. Forgot to grep for these or do a full distribution build, oops! Fix missing <sys/evcnt.h> by removing the evcnts instead. Just wanted to confirm that a race might happen, and indeed it did. These serve little diagnostic value otherwise. OR into bp->b_cflags; don't overwrite. CTASSERT lfs on-disk structure sizes. Avoid misaligned access to lfs64 on-disk records in memory. lfs64 directory entries are only 32-bit aligned in order to conserve space in directory blocks, and we had a hack to stuff a 64-bit inode in them. This replaces the hack by __aligned(4) __packed, and goes further: 1. It's not clear that all the other lfs64 data structures are 64-bit aligned on disk to begin with. We can go through these later and upgrade them from struct foo64 { ... } __aligned(4) __packed; union foo { struct foo64 f64; ... }; to struct foo64 { ... }; union foo { struct foo64 f64 __aligned(8); ... } __aligned(4) __packed; if we really want to take advantage of 64-bit memory accesses. However, the __aligned(4) __packed must remain on the union because: 2. We access even the lfs32 data structures via a union that has lfs64 members, and it turns out that compilers will assume access through a union with 64-bit aligned members implies the whole union has 64-bit alignment, even if we're only accessing a 32-bit aligned member. Fix clang build after packed lfs64 accessor change. Suppress spurious address-of-packed error in rump lfs too. |
| lfs_rename.c | 1.22.10.1 Mon Aug 17 10:30:22 UTC 2020 martin Pull up following revision(s) (requested by riastradh in ticket #1050): sys/ufs/lfs/lfs_subr.c: revision 1.101 sys/ufs/lfs/lfs_subr.c: revision 1.102 sys/ufs/lfs/lfs_inode.c: revision 1.158 sys/ufs/lfs/lfs_inode.h: revision 1.25 sys/ufs/lfs/lfs_balloc.c: revision 1.95 sys/ufs/lfs/lfs_pages.c: revision 1.21 sys/ufs/lfs/lfs_vnops.c: revision 1.330 sys/ufs/lfs/lfs_alloc.c: revision 1.140 (patch) sys/ufs/lfs/lfs_alloc.c: revision 1.141 (patch) lib/libp2k/p2k.c: revision 1.72 sys/ufs/lfs/lfs.h: revision 1.205 sys/ufs/lfs/lfs.h: revision 1.206 sys/ufs/lfs/lfs_segment.c: revision 1.284 sys/ufs/lfs/lfs.h: revision 1.207 sys/ufs/lfs/lfs_segment.c: revision 1.285 sys/ufs/lfs/lfs_debug.c: revision 1.55 sys/ufs/lfs/lfs_rename.c: revision 1.23 usr.sbin/dumplfs/dumplfs.c: revision 1.65 sys/ufs/lfs/lfs_vfsops.c: revision 1.371 sys/arch/i386/stand/efiboot/bootx64/Makefile: revision 1.3 sys/ufs/lfs/lfs_vfsops.c: revision 1.372 sys/ufs/lfs/lfs_vfsops.c: revision 1.373 sbin/fsck_lfs/pass1.c: revision 1.46 sys/ufs/lfs/lfs_vnops.c: revision 1.326 sys/ufs/lfs/lfs_vnops.c: revision 1.327 sys/ufs/lfs/lfs_vfsops.c: revision 1.375 (patch) sys/ufs/lfs/lfs_vnops.c: revision 1.328 sys/ufs/lfs/lfs_subr.c: revision 1.98 sys/ufs/lfs/lfs_extern.h: revision 1.116 sys/ufs/lfs/lfs_vnops.c: revision 1.329 sys/ufs/lfs/lfs_subr.c: revision 1.99 sys/ufs/lfs/lfs_extern.h: revision 1.117 sys/ufs/lfs/lfs_accessors.h: revision 1.49 sys/ufs/lfs/lfs_extern.h: revision 1.118 sys/rump/fs/lib/liblfs/Makefile: revision 1.15 sys/ufs/lfs/lfs_bio.c: revision 1.146 (patch) sys/ufs/lfs/lfs_bio.c: revision 1.147 sys/ufs/lfs/lfs_subr.c: revision 1.100 Fix kassert in lfs by initializing vp first. Use a marker node to iterate lfs_dchainhd / i_lfs_dchain. I believe elements can be removed while the lock is dropped, including the next node we're hanging on to. Just use VOP_BWRITE for lfs_bwrite_log. Hope this doesn't cause trouble with vfs_suspend. Teach lfs to transition ro<->rw. Prevent new dirops while we issue lfs_flush_dirops. lfs_flush_dirops assumes (by KASSERT((ip->i_state & IN_ADIROP) == 0)) that vnodes on the dchain will not become involved in active dirops even while holding no other locks (lfs_lock, v_interlock), so we must set lfs_writer here. All other callers already set lfs_writer. We set fs->lfs_writer++ without explicitly doing lfs_writer_enter because (a) we already waited for the dirops to drain, and (b) we hold lfs_lock and cannot drop it before setting lfs_writer. Assert lfs_writer where I think we can now prove it. Serialize access to the splay tree with lfs_lock. Change some cheap KDASSERT into KASSERT. Take a reference and fix assertions in lfs_flush_dirops. Fixes panic: KASSERT((ip->i_state & IN_ADIROP) == 0) at lfs_vnops.c:1670 lfs_flush_dirops lfs_check lfs_setattr VOP_SETATTR change_mode sys_fchmod syscall This assertion -- and the assertion that vp->v_uflag has VU_DIROP set -- is valid only until we release lfs_lock, because we may race with lfs_unmark_dirop which will remove the nodes and change the flags. Further, vp itself is valid only as long as it is referenced, which it is as long as it's on the dchain, but lfs_unmark_dirop drops the dchain's reference. Don't lfs_writer_enter while holding v_interlock. There's no need to lfs_writer_enter at all here, as far as I can see. lfs_flush_fs will do it for us. Break deadlock in PR kern/52301. The lock order is lfs_writer -> lfs_seglock. The problem in 52301 is that lfs_segwrite violates this lock order by sometimes doing lfs_seglock -> lfs_writer, either (a) when doing a checkpoint or (b), opportunistically, when there are no dirops pending. Both cases can deadlock, because dirops sometimes take the seglock (lfs_truncate, lfs_valloc, lfs_vfree): (a) There may be dirops pending, and they may be waiting for the seglock, so we can't wait for them to complete while holding the seglock. (b) The test for fs->lfs_dirops == 0 happens unlocked, and the state may change by the time lfs_writer_enter acquires lfs_lock. To resolve this in each case: (a) Do lfs_writer_enter before lfs_seglock, since we will need it unconditionally anyway. The worst performance impact of this should be that some dirops get delayed a little bit. (b) Create a new lfs_writer_tryenter to use at this point so that the test for fs->lfs_dirops == 0 and the acquisition of lfs_writer happen atomically under lfs_lock. Initialize/destroy lfs_allclean_wakeup in modcmd, not lfs_mountfs. Fixes reloading lfs.kmod. In lfs_update, hold lfs_writer around lfs_vflush. Otherwise, we might do lfs_vflush -> lfs_seglock -> lfs_segwait(SEGM_CKP) -> lfs_writer_enter which is the reverse of the lfs_writer -> lfs_seglock ordering. Call lfs_orphan in lfs_rename while we're still in the dirop. lfs_writer_enter can't fail; keep it simple and don't pretend it can. Assert that mtsleep can't fail either -- it doesn't catch signals and there's no timeout. Teach LFS_ORPHAN_NEXTFREE about lfs64. Dust off the orphan detection code and try to make it work. Fix !DIAGNOSTIC compile Fix userland references to LFS_ORPHAN_NEXTFREE. Forgot to grep for these or do a full distribution build, oops! Fix missing <sys/evcnt.h> by removing the evcnts instead. Just wanted to confirm that a race might happen, and indeed it did. These serve little diagnostic value otherwise. OR into bp->b_cflags; don't overwrite. CTASSERT lfs on-disk structure sizes. Avoid misaligned access to lfs64 on-disk records in memory. lfs64 directory entries are only 32-bit aligned in order to conserve space in directory blocks, and we had a hack to stuff a 64-bit inode in them. This replaces the hack by __aligned(4) __packed, and goes further: 1. It's not clear that all the other lfs64 data structures are 64-bit aligned on disk to begin with. We can go through these later and upgrade them from struct foo64 { ... } __aligned(4) __packed; union foo { struct foo64 f64; ... }; to struct foo64 { ... }; union foo { struct foo64 f64 __aligned(8); ... } __aligned(4) __packed; if we really want to take advantage of 64-bit memory accesses. However, the __aligned(4) __packed must remain on the union because: 2. We access even the lfs32 data structures via a union that has lfs64 members, and it turns out that compilers will assume access through a union with 64-bit aligned members implies the whole union has 64-bit alignment, even if we're only accessing a 32-bit aligned member. Fix clang build after packed lfs64 accessor change. Suppress spurious address-of-packed error in rump lfs too. |
| /src/usr.sbin/dumplfs/ | |
| dumplfs.c | 1.64.4.1 Mon Aug 17 10:30:22 UTC 2020 martin Pull up following revision(s) (requested by riastradh in ticket #1050): sys/ufs/lfs/lfs_subr.c: revision 1.101 sys/ufs/lfs/lfs_subr.c: revision 1.102 sys/ufs/lfs/lfs_inode.c: revision 1.158 sys/ufs/lfs/lfs_inode.h: revision 1.25 sys/ufs/lfs/lfs_balloc.c: revision 1.95 sys/ufs/lfs/lfs_pages.c: revision 1.21 sys/ufs/lfs/lfs_vnops.c: revision 1.330 sys/ufs/lfs/lfs_alloc.c: revision 1.140 (patch) sys/ufs/lfs/lfs_alloc.c: revision 1.141 (patch) lib/libp2k/p2k.c: revision 1.72 sys/ufs/lfs/lfs.h: revision 1.205 sys/ufs/lfs/lfs.h: revision 1.206 sys/ufs/lfs/lfs_segment.c: revision 1.284 sys/ufs/lfs/lfs.h: revision 1.207 sys/ufs/lfs/lfs_segment.c: revision 1.285 sys/ufs/lfs/lfs_debug.c: revision 1.55 sys/ufs/lfs/lfs_rename.c: revision 1.23 usr.sbin/dumplfs/dumplfs.c: revision 1.65 sys/ufs/lfs/lfs_vfsops.c: revision 1.371 sys/arch/i386/stand/efiboot/bootx64/Makefile: revision 1.3 sys/ufs/lfs/lfs_vfsops.c: revision 1.372 sys/ufs/lfs/lfs_vfsops.c: revision 1.373 sbin/fsck_lfs/pass1.c: revision 1.46 sys/ufs/lfs/lfs_vnops.c: revision 1.326 sys/ufs/lfs/lfs_vnops.c: revision 1.327 sys/ufs/lfs/lfs_vfsops.c: revision 1.375 (patch) sys/ufs/lfs/lfs_vnops.c: revision 1.328 sys/ufs/lfs/lfs_subr.c: revision 1.98 sys/ufs/lfs/lfs_extern.h: revision 1.116 sys/ufs/lfs/lfs_vnops.c: revision 1.329 sys/ufs/lfs/lfs_subr.c: revision 1.99 sys/ufs/lfs/lfs_extern.h: revision 1.117 sys/ufs/lfs/lfs_accessors.h: revision 1.49 sys/ufs/lfs/lfs_extern.h: revision 1.118 sys/rump/fs/lib/liblfs/Makefile: revision 1.15 sys/ufs/lfs/lfs_bio.c: revision 1.146 (patch) sys/ufs/lfs/lfs_bio.c: revision 1.147 sys/ufs/lfs/lfs_subr.c: revision 1.100 Fix kassert in lfs by initializing vp first. Use a marker node to iterate lfs_dchainhd / i_lfs_dchain. I believe elements can be removed while the lock is dropped, including the next node we're hanging on to. Just use VOP_BWRITE for lfs_bwrite_log. Hope this doesn't cause trouble with vfs_suspend. Teach lfs to transition ro<->rw. Prevent new dirops while we issue lfs_flush_dirops. lfs_flush_dirops assumes (by KASSERT((ip->i_state & IN_ADIROP) == 0)) that vnodes on the dchain will not become involved in active dirops even while holding no other locks (lfs_lock, v_interlock), so we must set lfs_writer here. All other callers already set lfs_writer. We set fs->lfs_writer++ without explicitly doing lfs_writer_enter because (a) we already waited for the dirops to drain, and (b) we hold lfs_lock and cannot drop it before setting lfs_writer. Assert lfs_writer where I think we can now prove it. Serialize access to the splay tree with lfs_lock. Change some cheap KDASSERT into KASSERT. Take a reference and fix assertions in lfs_flush_dirops. Fixes panic: KASSERT((ip->i_state & IN_ADIROP) == 0) at lfs_vnops.c:1670 lfs_flush_dirops lfs_check lfs_setattr VOP_SETATTR change_mode sys_fchmod syscall This assertion -- and the assertion that vp->v_uflag has VU_DIROP set -- is valid only until we release lfs_lock, because we may race with lfs_unmark_dirop which will remove the nodes and change the flags. Further, vp itself is valid only as long as it is referenced, which it is as long as it's on the dchain, but lfs_unmark_dirop drops the dchain's reference. Don't lfs_writer_enter while holding v_interlock. There's no need to lfs_writer_enter at all here, as far as I can see. lfs_flush_fs will do it for us. Break deadlock in PR kern/52301. The lock order is lfs_writer -> lfs_seglock. The problem in 52301 is that lfs_segwrite violates this lock order by sometimes doing lfs_seglock -> lfs_writer, either (a) when doing a checkpoint or (b), opportunistically, when there are no dirops pending. Both cases can deadlock, because dirops sometimes take the seglock (lfs_truncate, lfs_valloc, lfs_vfree): (a) There may be dirops pending, and they may be waiting for the seglock, so we can't wait for them to complete while holding the seglock. (b) The test for fs->lfs_dirops == 0 happens unlocked, and the state may change by the time lfs_writer_enter acquires lfs_lock. To resolve this in each case: (a) Do lfs_writer_enter before lfs_seglock, since we will need it unconditionally anyway. The worst performance impact of this should be that some dirops get delayed a little bit. (b) Create a new lfs_writer_tryenter to use at this point so that the test for fs->lfs_dirops == 0 and the acquisition of lfs_writer happen atomically under lfs_lock. Initialize/destroy lfs_allclean_wakeup in modcmd, not lfs_mountfs. Fixes reloading lfs.kmod. In lfs_update, hold lfs_writer around lfs_vflush. Otherwise, we might do lfs_vflush -> lfs_seglock -> lfs_segwait(SEGM_CKP) -> lfs_writer_enter which is the reverse of the lfs_writer -> lfs_seglock ordering. Call lfs_orphan in lfs_rename while we're still in the dirop. lfs_writer_enter can't fail; keep it simple and don't pretend it can. Assert that mtsleep can't fail either -- it doesn't catch signals and there's no timeout. Teach LFS_ORPHAN_NEXTFREE about lfs64. Dust off the orphan detection code and try to make it work. Fix !DIAGNOSTIC compile Fix userland references to LFS_ORPHAN_NEXTFREE. Forgot to grep for these or do a full distribution build, oops! Fix missing <sys/evcnt.h> by removing the evcnts instead. Just wanted to confirm that a race might happen, and indeed it did. These serve little diagnostic value otherwise. OR into bp->b_cflags; don't overwrite. CTASSERT lfs on-disk structure sizes. Avoid misaligned access to lfs64 on-disk records in memory. lfs64 directory entries are only 32-bit aligned in order to conserve space in directory blocks, and we had a hack to stuff a 64-bit inode in them. This replaces the hack by __aligned(4) __packed, and goes further: 1. It's not clear that all the other lfs64 data structures are 64-bit aligned on disk to begin with. We can go through these later and upgrade them from struct foo64 { ... } __aligned(4) __packed; union foo { struct foo64 f64; ... }; to struct foo64 { ... }; union foo { struct foo64 f64 __aligned(8); ... } __aligned(4) __packed; if we really want to take advantage of 64-bit memory accesses. However, the __aligned(4) __packed must remain on the union because: 2. We access even the lfs32 data structures via a union that has lfs64 members, and it turns out that compilers will assume access through a union with 64-bit aligned members implies the whole union has 64-bit alignment, even if we're only accessing a 32-bit aligned member. Fix clang build after packed lfs64 accessor change. Suppress spurious address-of-packed error in rump lfs too. |