#
0085afdc |
|
23-Feb-2024 |
Konstantin Belousov <kib@FreeBSD.org> |
fs/msdosfs fatblock: use ulmin() rather than min() to avoid truncation of pmp->pm_FATsecs. Submitted by: Robert Morris <rtm@lcs.mit.edu> PR: 277237 MFC after: 1 week
|
#
71625ec9 |
|
16-Aug-2023 |
Warner Losh <imp@FreeBSD.org> |
sys: Remove $FreeBSD$: one-line .c comment pattern Remove /^/[*/]\s*\$FreeBSD\$.*\n/
|
#
0728695c |
|
25-Apr-2023 |
Stefan Eßer <se@FreeBSD.org> |
fs/msdosfs: Fix potential panic and size calculations Some combinations of FAT12 file system parameters could cause a kernel panic due to an unmapped access if the size of the FAT was larger than the CPU page size. The reason is that FAT12 uses 3 bytes to store 2 FAT pointers, leading to partial FAT pointers at the end of buffers of a size that is not a multiple of 3. With a typical page size of 4 KB, this caused the FAT entry at byte offsets 4095 and 4096 to cross the page boundary, with only the first page mapped. This was fixed by adjusting the mapping to always cover both bytes of each FAT entry. Testing revealed 2 other inconsistencies that are fixed by this commit: 1) The calculation of the size of the data area did not take into account the fact that the first two data block numbers are reserved and that the data area starts with block 2. This could cause a FAT12 file system created with the maximum supported number of blocks to be incorrectly identified as FAT16. 2) The root directory does not take up space in the data area of a FAT12 or FAT16 file system, since it is placed into a reserved area outside of that data area. This commits makes stat() report the logical size of the root directory, but with 0 blocks allocated from the data area. PR: 270587 Reviewed by: mckusick Differential Revision: https://reviews.freebsd.org/D39386
|
#
41e85eea |
|
25-Dec-2021 |
Konstantin Belousov <kib@FreeBSD.org> |
msdosfs: on integrity error, fire a task to remount filesystem to ro In collaboration with: pho Reviewed by: markj, mckusick Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D33721
|
#
65990b68 |
|
04-Jan-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
msdosfs: clusterfree() is used only in error handling cases Change its return type to void, because its result is ignored in both call sites. Remove oldcnp argument as well, it is NULL always. Suggested and reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D33721
|
#
2c9a1c22 |
|
25-Dec-2021 |
Konstantin Belousov <kib@FreeBSD.org> |
msdosfs: take inusemap inconsistency as an error, not invariants violation In other words, stop silently accepting freeing free cluster in non-debug kernels, but return the error to the caller. Modify callers to handle errors from usemap_free(). In collaboration with: pho Reviewed by: markj, mckusick Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D33721
|
#
586ee69f |
|
01-Sep-2020 |
Mateusz Guzik <mjg@FreeBSD.org> |
fs: clean up empty lines in .c and .h files
|
#
53fcc6c9 |
|
11-Oct-2019 |
Konstantin Belousov <kib@FreeBSD.org> |
Plug the rest of undef behavior places that were missed in r337456. There are three more places in msdosfs_fat.c which might shift one into the sign bit. While there, fix formatting of KASSERTs. Sponsored by: The FreeBSD Foundation MFC after: 1 week
|
#
aaa38524 |
|
11-Sep-2019 |
Conrad Meyer <cem@FreeBSD.org> |
buf: Add B_INVALONERR flag to discard data Setting the B_INVALONERR flag before a synchronous write causes the buf cache to forcibly invalidate contents if the write fails (BIO_ERROR). This is intended to be used to allow layers above the buffer cache to make more informed decisions about when discarding dirty buffers without successful write is acceptable. As a proof of concept, use in msdosfs to handle failures to mark the on-disk 'dirty' bit during rw mount or ro->rw update. Extending this to other filesystems is left as future work. PR: 210316 Reviewed by: kib (with objections) Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D21539
|
#
454409a3 |
|
06-Sep-2019 |
Conrad Meyer <cem@FreeBSD.org> |
msdosfs: Remove redundant brelse() after r294954 Same automation. No functional change.
|
#
f80cbeb2 |
|
05-Sep-2019 |
Conrad Meyer <cem@FreeBSD.org> |
msdosfs: Drop an unneeded brelse in bread error condition After r294954, it is an invariant that bread returns non-NULL bp if and only if the routine succeeded. On error, it handles any buffer cleanup internally. So the brelse(NULL) here was just redundant. No functional change. Discussed with: kib (extracted from a larger differential)
|
#
b257feb2 |
|
22-Aug-2019 |
Ed Maste <emaste@FreeBSD.org> |
msdosfs_fat: reduce diffs with NetBSD and makefs Use pointer arithmetic (as now done in makefs, and in NetBSD) instead of taking the address of array element. No functional change, but this makes it easier to compare different versions of this file. Reviewed by: kib MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D21365
|
#
ae909414 |
|
09-Apr-2019 |
Konstantin Belousov <kib@FreeBSD.org> |
Add vn_fsync_buf(). Provide a convenience function to avoid the hack with filling fake struct vop_fsync_args and then calling vop_stdfsync(). Sponsored by: The FreeBSD Foundation MFC after: 1 week
|
#
997febb1 |
|
09-Apr-2019 |
Konstantin Belousov <kib@FreeBSD.org> |
Fix dirty buf exhaustion easily triggered with msdosfs. If truncate(2) is performed on msdosfs file, which extends the file by system-depended large amount, fs creates corresponding amount of dirty delayed-write buffers, which can consume all buffers. Such buffers cannot be flushed by the bufdaemon because the ftruncate() thread owns the vnode lock. So the system runs out of free buffers, and even truncate() thread starves, which means deadlock because it owns the vnode lock. Fix this by doing vnode fsync in extendfile() when low memory or low buffers condition detected, which flushes all dirty buffers belonging to the file being extended. Note that the more usual fallback to bawrite() does not work acceptable in this situation, because it would only allow one buffer to be recycled. Other filesystems, most important UFS, do not allow userspace to create arbitrary amount of dirty delayed-write buffers without feedback, so bawrite() is good enough for them. Reported and tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week
|
#
c820acbf |
|
08-Aug-2018 |
Pedro F. Giffuni <pfg@FreeBSD.org> |
msdosfs: fixes for Undefined Behavior. These were found by the Undefined Behaviour GsoC project at NetBSD: Do not change signedness bit with left shift. While there avoid signed integer overflow. Address both issues with using unsigned type. msdosfs_fat.c:512:42, left shift of 1 by 31 places cannot be represented in type 'int' msdosfs_fat.c:521:44, left shift of 1 by 31 places cannot be represented in type 'int' msdosfs_fat.c:744:14, left shift of 1 by 31 places cannot be represented in type 'int' msdosfs_fat.c:744:24, signed integer overflow: -2147483648 - 1 cannot be represented in type 'int [20]' msdosfs_fat.c:840:13, left shift of 1 by 31 places cannot be represented in type 'int' msdosfs_fat.c:840:36, signed integer overflow: -2147483648 - 1 cannot be represented in type 'int [20]' Detected with micro-UBSan in the user mode. Hinted from: NetBSD (CVS 1.33) MFC after: 2 weeks Differenctial Revision: https://reviews.freebsd.org/D16615
|
#
4111ab70 |
|
16-May-2018 |
Kirk McKusick <mckusick@FreeBSD.org> |
Revert change made in base r171522 (https://svnweb.freebsd.org/base?view=revision&revision=304232) converting clrbuf() (which clears the entire buffer) to vfs_bio_clrbuf() (which clears only the new pages that have been added to the buffer). Failure to properly remove pages from the buffer cache can make pages that appear not to need clearing to actually have bad random data in them. See for example base r304232 (https://svnweb.freebsd.org/base?view=revision&revision=304232) which noted the need to set B_INVAL and B_NOCACHE as well as clear the B_CACHE flag before calling brelse() to release the buffer. Rather than trying to find all the incomplete brelse() calls, it is simpler, though more slightly expensive, to simply clear the entire buffer when it is newly allocated. PR: 213507 Submitted by: Damjan Jovanovic Reviewed by: kib
|
#
d63027b6 |
|
27-Nov-2017 |
Pedro F. Giffuni <pfg@FreeBSD.org> |
sys/fs: further adoption of SPDX licensing ID tags. Mainly focus on files that use BSD 2-Clause license, however the tool I was using misidentified many licenses so this was mostly a manual - error prone - task. The Software Package Data Exchange (SPDX) group provides a specification to make it easier for automated tools to detect and summarize well known opensource licenses. We are gradually adopting the specification, noting that the tags are considered only advisory and do not, in any way, superceed or replace the license texts.
|
#
4eeec01f |
|
28-Aug-2017 |
Konstantin Belousov <kib@FreeBSD.org> |
Style. Sponsored by: The FreeBSD Foundation MFC after: 2 weeks
|
#
fbcbbe78 |
|
28-Aug-2017 |
Konstantin Belousov <kib@FreeBSD.org> |
Verify that the BPB media descriptor and FAT ID match. FAT specification requires that for valid FAT, FAT cluster 0 has a specific value derived from the BPB media descriptor. The lowest (little-endian) byte must be equal to bpb.bpbMedia, other bits in the cluster number must be all 1's. Implement the check to reduce the chance of the randomly corrupted FAT to pass the mount attempt. Submitted by: Siva Mahadevan <smahadevan@freebsdfoundation.org> MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D12124
|
#
1f7d7cd7 |
|
21-Jun-2017 |
Ed Maste <emaste@FreeBSD.org> |
msdosfs: reformat a comment to reduce NetBSD diffs
|
#
6a1c2e1f |
|
02-Jun-2017 |
Ed Maste <emaste@FreeBSD.org> |
msdosfs: use mem{cpy,move,set} instead of bcopy,bzero This somewhat simplifies use of msdosfs code in userland (for makefs), reduces diffs with NetBSD and is standard C as of C89. Reviewed by: imp MFC after: 1 month Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D11014
|
#
9287dbaa |
|
21-May-2017 |
Ed Maste <emaste@FreeBSD.org> |
msdosfs: capitalize FAT appropriately Diff reduction with NetBSD, including some nearby minor whitespace or style fixes. Obtained from: NetBSD Sponsored by: The FreeBSD Foundation
|
#
23c53312 |
|
19-May-2017 |
Ed Maste <emaste@FreeBSD.org> |
msdosfs: use C99 types General cleanup, for diff reduction with NetBSD and future use by FAT support in makefs. Submitted by: Siva Mahadevan <smahadevan@freebsdfoundation.org> Obtained from: NetBSD Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D10821
|
#
b05088ae |
|
28-Oct-2016 |
Konstantin Belousov <kib@FreeBSD.org> |
Ensure that cluster allocations never allocate clusters outside the volume limits. In particular: - Assert that usemap_alloc() and usemap_free() cluster number argument is valid. - In chainlength(), return 0 if cluster start is after the max cluster. - In chainlength(), cut the calculated cluster chain length at the max cluster. - For true paranoia, after the pm_inusemap is calculated in fillinusemap(), reset all bits in the array for clusters after the max cluster, as in-use. Reported and tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 2 weeks
|
#
03b8a419 |
|
28-Oct-2016 |
Konstantin Belousov <kib@FreeBSD.org> |
If the fatchain() call in chainalloc() returned an error, revert marking the cluster run as in-use. Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 2 weeks
|
#
f33d62b2 |
|
28-Oct-2016 |
Konstantin Belousov <kib@FreeBSD.org> |
Use symbolic name for the value of fully free word in pm_inusemap. Explicitely mention every bit in the value. Sponsored by: The FreeBSD Foundation MFC after: 2 weeks
|
#
1c4ec415 |
|
28-Oct-2016 |
Konstantin Belousov <kib@FreeBSD.org> |
Use symbolic name for the free cluster number. Sponsored by: The FreeBSD Foundation MFC after: 2 weeks
|
#
f220587d0 |
|
28-Oct-2016 |
Konstantin Belousov <kib@FreeBSD.org> |
Fix comment formatting. Sponsored by: The FreeBSD Foundation MFC after: 2 weeks
|
#
b3a15ddd |
|
29-Apr-2016 |
Pedro F. Giffuni <pfg@FreeBSD.org> |
sys/fs: spelling fixes in comments. No functional change.
|
#
0d3e502f |
|
15-Apr-2016 |
Pedro F. Giffuni <pfg@FreeBSD.org> |
fs misc: for pointers replace 0 with NULL. Mostly cosmetical, no functional change. Found with devel/coccinelle.
|
#
420d65d9 |
|
05-Apr-2015 |
Konstantin Belousov <kib@FreeBSD.org> |
Assert that an msdosfs mount is not read-only when FAT modifications are requested. PR: 199152 Sponsored by: The FreeBSD Foundation MFC after: 1 week
|
#
4882501b |
|
12-Jan-2015 |
Ed Maste <emaste@FreeBSD.org> |
ANSIfy msdosfs Add a few cases and style(9) fixes missed in r276887 Sponsored by: The FreeBSD Foundation
|
#
10c9700f |
|
09-Jan-2015 |
Ed Maste <emaste@FreeBSD.org> |
ANSIfy sys/fs/msdosfs There are a number of msdosfs improvements in NetBSD that may be worth bringing over, and this reduces noise in the comparison. Differential Revision: https://reviews.freebsd.org/D1466 Reviewed by: kib Sponsored by: The FreeBSD Foundation
|
#
bb7ca822 |
|
17-Feb-2013 |
Konstantin Belousov <kib@FreeBSD.org> |
Do not update the fsinfo block on each update of any fat block, this is excessive. Postpone the flush of the fsinfo to VFS_SYNC(), remembering the need for update with the flag MSDOSFS_FSIMOD, stored in pm_flags. FAT32 specification describes both FSI_Free_Count and FSI_Nxt_Free as the advisory hints, not requiring them to be correct. Based on the patch from bde, modified by me. Reviewed by: bde MFC after: 2 weeks
|
#
11fca81c |
|
01-Feb-2013 |
Konstantin Belousov <kib@FreeBSD.org> |
The MSDOSFSMNT_WAITONFAT flag is bogus and broken. It does less than track the MNT_SYNCHRONOUS flag. It is set to the latter at mount time but not updated by MNT_UPDATE. Use MNT_SYNCHRONOUS to decide to write the FAT updates syncrhonously. Submitted by: bde MFC after: 1 week
|
#
79fb7dd1 |
|
01-Feb-2013 |
Konstantin Belousov <kib@FreeBSD.org> |
Backup FATs were sometimes marked dirty by copying their first block from the primary FAT, and then they were not marked clean on unmount. Force marking them clean when appropriate. Submitted by: bde MFC after: 1 week
|
#
a26b949f |
|
01-Feb-2013 |
Konstantin Belousov <kib@FreeBSD.org> |
Fix a backwards comment in markvoldirty(). Submitted by: bde MFC after: 1 week
|
#
54cf9198 |
|
22-Nov-2011 |
Konstantin Belousov <kib@FreeBSD.org> |
Put all the messages from msdosfs under the MSDOSFS_DEBUG ifdef. They are confusing to user, and not informative for general consumption. MFC after: 1 week
|
#
a7d5f7eb |
|
19-Oct-2010 |
Jamie Gritton <jamie@FreeBSD.org> |
A new jail(8) with a configuration file, to replace the work currently done by /etc/rc.d/jail.
|
#
255ca657 |
|
24-Mar-2010 |
Konstantin Belousov <kib@FreeBSD.org> |
MFC r204472: Add assertions for FAT bitmap state.
|
#
05ecce0c |
|
24-Mar-2010 |
Konstantin Belousov <kib@FreeBSD.org> |
MFC r204471: Use pm_fatlock to protect fat bitmap.
|
#
1a07617f |
|
24-Mar-2010 |
Konstantin Belousov <kib@FreeBSD.org> |
MFC r204466: Assert that the msdosfs vnode is (e)locked in several places. Change the check and return on impossible condition into KASSERT().
|
#
99cb1f24 |
|
24-Mar-2010 |
Konstantin Belousov <kib@FreeBSD.org> |
MFC r204465: Remove unused global statistic about fat cache usage.
|
#
eb739c7c |
|
28-Feb-2010 |
Konstantin Belousov <kib@FreeBSD.org> |
Add assertions for FAT bitmap state. Tested by: pho MFC after: 3 weeks
|
#
6be1a4cc |
|
28-Feb-2010 |
Konstantin Belousov <kib@FreeBSD.org> |
Use pm_fatlock to protect fat bitmap. Tested by: pho MFC after: 3 weeks
|
#
ef6a2be3 |
|
28-Feb-2010 |
Konstantin Belousov <kib@FreeBSD.org> |
Assert that the msdosfs vnode is (e)locked in several places. The plan is to use vnode lock to protect denode and fat cache, and having separate lock for block use map. Change the check and return on impossible condition into KASSERT(). Tested by: pho MFC after: 3 weeks
|
#
35fcc066 |
|
28-Feb-2010 |
Konstantin Belousov <kib@FreeBSD.org> |
Remove unused global statistic about fat cache usage. Tested by: pho MFC after: 3 weeks
|
#
3588e7da |
|
21-Feb-2010 |
Konstantin Belousov <kib@FreeBSD.org> |
MFC r203866: Invalid filesystem might cause the bp to be never read.
|
#
3c8b687f |
|
13-Feb-2010 |
Konstantin Belousov <kib@FreeBSD.org> |
Invalid filesystem might cause the bp to be never read. Noted by: Pedro F. Giffuni <giffunip tutopia com> Obtanined from: NetBSD MFC after: 1 week
|
#
d7f03759 |
|
19-Oct-2008 |
Ulf Lilleengen <lulf@FreeBSD.org> |
- Import the HEAD csup code which is the basis for the cvsmode work.
|
#
67c7bbf3 |
|
01-Sep-2008 |
Konstantin Belousov <kib@FreeBSD.org> |
In rev. 1.17 (r33548) of msdosfs_fat.c, relative cluster numbers were replaced by file relative sector numbers as the buffer block number when zero-padding a file during extension. Revert the change, it causes wrong blocks filled with zeroes on seeking beyond end of file. PR: kern/47628 Submitted by: tegge MFC after: 3 days
|
#
ededffc0 |
|
25-Oct-2007 |
Tom Rhodes <trhodes@FreeBSD.org> |
Remove some debugging code that, while useful, doesn't belong in the committed version. While here, expand a macro only used once. Discussed with/oked by: bde
|
#
ed316d33 |
|
23-Sep-2007 |
Bruce Evans <bde@FreeBSD.org> |
Remove some of the pessimizations involving writing the fsi sector. All active fields in fsi are advisory/optional, so we shouldn't do extra work to make them valid at all times, but instead we write to the fsi too often (we still do), and we searched for a free cluster for fsinxtfree too often. This commit just removes the whole search and its results, so that we write out our in-core copy of fsinxtfree instead of writing a "fixed" copy and clobbering our in-core copy. This saves fixing 3 bugs: - off-by-1 error for the end of the search, resulting in fsinxtfree not actually being adjusted iff only the last cluster is free. - missing adjustment when no clusters are free. - off-by-many error for the start of the search. Starting the search at 0 instead of at (the in-core copy of) fsinxtfree did more than defeat the reasons for existence of fsinxtfree. fsinxtfree exists mainly to avoid having to start at 0 for just the first search per mount, but has the side effect of reducing bias towards allocating near cluster 0. The bias would normally only be generated by the first search per mount (if fsinxtfree is not supported), but since we also adjusted the in-core copy of fsinxtfree here, we were doing extra work to maximize the bias. Approved by: re (kensmith)
|
#
b6d0381e |
|
06-Aug-2007 |
Bruce Evans <bde@FreeBSD.org> |
Fix some style bugs (some whitespace errors only). Approved by: re (kensmith) (blanket)
|
#
5696c6e0 |
|
06-Aug-2007 |
Bruce Evans <bde@FreeBSD.org> |
Sort includes. Remove banal comments before includes. Remove rotted banal comments attached to includes. Approved by: re (kensmith) (blanket)
|
#
6fd81fc7 |
|
06-Aug-2007 |
Bruce Evans <bde@FreeBSD.org> |
Remove unused include(s). Approved by: re (kensmith) (blanket)
|
#
37269429 |
|
03-Aug-2007 |
Bruce Evans <bde@FreeBSD.org> |
Oops, fix the fix for the i/o size of the fsinfo block. Its log message explained why the size is 1 sector, but the code used a size of 1 cluster. I/o sizes larger than necessary may cause serious coherency problems in the buffer cache. Here I think there were only minor efficiency problems, since a too-large fsinfo buffer could only get far enough to overlap buffers for the same vnode (the device vnode), so mappings are coherent at the page level although not at the buffer level, and the former is probably enough due to our limited use of the fsinfo buffer. Approved by: re (kensmith)
|
#
d34b0a1b |
|
20-Jul-2007 |
Bruce Evans <bde@FreeBSD.org> |
Clean up before implementing vfs clustering for msdosfs: In msdosfs_read(), mainly reorder the main loop to the same order as in ffs_read(). In msdosfs_write() and extendfile(), use vfs_bio_clrbuf() instead of clrbuf(). I think this just just a bogus optimization, but ffs always does it and msdosfs already did it in one place, and it is what I've tested. In msdosfs_write(), merge good bits from a comment in ffs_write(), and fix 1 style bug. In the main comment for msdosfs_pcbmap(), improve wording and catch up with 13 years of changes in the function. This comment belongs in VOP_BMAP.9 but that doesn't exist. In msdosfs_bmap(), return EFBIG if the requested cluster number is out of bounds instead of blindly truncating it, and fix many style bugs. Approved by: re (hrs)
|
#
fd7c4230 |
|
12-Jul-2007 |
Bruce Evans <bde@FreeBSD.org> |
Fix some bugs involving the fsinfo block (many remain unfixed). This is part of fixing msdosfs for large sector sizes. One of the fixed bugs was fatal for large sector sizes. 1. The fsinfo block has size 512, but it was misunderstood and declared as having size 1024, with nothing in the second 512 bytes except a signature at the end. The second 512 bytes actually normally (if the file system was created by Windows) consist of a second boot sector which is normally (in WinXP) empty except for a signature -- the normal layout is one boot sector, one fsinfo sector, another boot sector, then these 3 sectors duplicated. However, other layouts are valid. newfs_msdos produces a valid layout with one boot sector, one fsinfo sector, then these 2 sectors duplicated. The signature check for the extra part of the fsinfo was thus normally checking the signature in either the second boot sector or the first boot sector in the copy, and thus accidentally succeeding. The extra signature check would just fail for weirder layouts with 512-byte sectors, and for normal layouts with any other sector size. Remove the extra bytes and the extra signature check. 2. Old versions did i/o to the fsinfo block using size 1024, with the second half only used for the extra signature check on read. This was harmless for sector size 512, and worked accidentally for sector size 1024. The i/o just failed for larger sector sizes. The version being fixed did i/o to the fsinfo block using size fsi_size(pmp) = (1024 << ((pmp)->pm_BlkPerSec >> 2)). This expression makes no sense. It happens to work for sector small sector sizes, but for sector size 32K it gives the preposterous value of 64M and thus causes panics. A sector size of 32768 is necessary for at least some DVD-RW's (where the minimum write size is 32768 although the minimum read size is 2048). Now that the size of the fsinfo block is 512, it always fits in one sector so there is no need for a macro to express it. Just use the sector size where the old code uses 1024. Approved by: re (kensmith) Approved by: nyan (several years ago for a different version of (2))
|
#
8e55bfaf |
|
10-Jul-2007 |
Bruce Evans <bde@FreeBSD.org> |
Don't use almost perfectly pessimal cluster allocation. Allocation of the the first cluster in a file (and, if the allocation cannot be continued contiguously, for subsequent clusters in a file) was randomized in an attempt to leave space for contiguous allocation of subsequent clusters in each file when there are multiple writers. This reduced internal fragmentation by a few percent, but it increased external fragmentation by up to a few thousand percent. Use simple sequential allocation instead. Actually maintain the fsinfo sequence index for this. The read and write of this index from/to disk still have many non-critical bugs, but we now write an index that has something to do with our allocations instead of being modified garbage. If there is no fsinfo on the disk, then we maintain the index internally and don't go near the bugs for writing it. Allocating the first free cluster gives a layout that is almost as good (better in some cases), but takes too much CPU if the FAT is large and the first free cluster is not near the beginning. The effect of this change for untar and tar of a slightly reduced copy of /usr/src on a new file system was: Before (msdosfs 4K-clusters): untar: 459.57 real untar from cached file (actually a pipe) tar: 342.50 real tar from uncached tree to /dev/zero Before (ffs2 soft updates 4K-blocks 4K-frags) untar: 39.18 real tar: 29.94 real Before (ffs2 soft updates 16K-blocks 2K-frags) untar: 31.35 real tar: 18.30 real After (msdosfs 4K-clusters): untar 54.83 real tar 16.18 real All of these times can be improved further. With multiple concurrent writers or readers (especially readers), the improvement is smaller, but I couldn't find any case where it is negative. 342 seconds for tarring up about 342 MB on a ~47MB/S partition is just hard to unimprove on. (This operation would take about 7.3 seconds with reasonably localized allocation and perfect read-ahead.) However, for active file systems, 342 seconds is closer to normal than the 16+ seconds above or the 11 seconds with other changes (best I've measured -- won easily by msdosfs!). E.g., my active /usr/src on ffs1 is quite old and fragmented, so reading to prepare for the above benchmark takes about 6 times longer than reading back the fresh copies of it. Approved by: re (kensmith)
|
#
bade0e00 |
|
29-Jan-2007 |
Tom Rhodes <trhodes@FreeBSD.org> |
Fix spacing from my previous commit to this file: Noticed by: fjoe
|
#
752945d6 |
|
16-Jan-2007 |
Tom Rhodes <trhodes@FreeBSD.org> |
Add a 3rd entry in the cache, which keeps the end position from just before extending a file. This has the desired effect of keeping the write speed constant. And yes, that helps a lot copying large files always at full speed now, and I have seen improvements using benchmarks/bonnie. Stolen from: NetBSD Reviewed by: bde
|
#
d167cf6f |
|
06-Jan-2005 |
Warner Losh <imp@FreeBSD.org> |
/* -> /*- for copyright notices, minor format tweaks as necessary
|
#
d23af19a |
|
08-Sep-2004 |
Tim J. Robbins <tjr@FreeBSD.org> |
Merge from NetBSD: Fix a panic that occurred when trying to traverse a corrupt msdosfs filesystem. With this particular corruption, the code in pcbmap() would compute an offset into an array that was way out of bounds, so check the bounds before trying to access and return an error if the offset would be out of bounds. Submitted by: Xin LI
|
#
392dbea3 |
|
29-Dec-2003 |
Bruce Evans <bde@FreeBSD.org> |
Fixed some (most) style bugs in rev.1.33. Mainly 4-char indentation (msdosfs uses normal 8-char indentation almost everywhere else), too-long lines, and minor English usage errors. The verbose formal comment before the new function is still abnormal.
|
#
cede1f56 |
|
26-Dec-2003 |
Tom Rhodes <trhodes@FreeBSD.org> |
Make msdosfs support the dirty flag in FAT16 and FAT32. Enable lockf support. PR: 55861 Submitted by: Jun Su <junsu@m-net.arbornet.org> (original version) Reviewed by: make universe
|
#
7261f5f6 |
|
03-Mar-2003 |
Jeff Roberson <jeff@FreeBSD.org> |
- Add a new 'flags' parameter to getblk(). - Define one flag GB_LOCK_NOWAIT that tells getblk() to pass the LK_NOWAIT flag to the initial BUF_LOCK(). This will eventually be used in cases were we want to use a buffer only if it is not currently in use. - Convert all consumers of the getblk() api to use this extra parameter. Reviwed by: arch Not objected to by: mckusick
|
#
d394511d |
|
16-May-2002 |
Tom Rhodes <trhodes@FreeBSD.org> |
More s/file system/filesystem/g
|
#
b76d0b32 |
|
22-Mar-2002 |
Bruce Evans <bde@FreeBSD.org> |
Fixed some style bugs in the removal of __P(()). Continuation lines were not outdented to preserve non-KNF lining up of code with parentheses. Switch to KNF formatting.
|
#
11caded3 |
|
19-Mar-2002 |
Alfred Perlstein <alfred@FreeBSD.org> |
Remove __P.
|
#
0d2af521 |
|
15-Mar-2002 |
Kirk McKusick <mckusick@FreeBSD.org> |
Introduce the new 64-bit size disk block, daddr64_t. Change the bio and buffer structures to have daddr64_t bio_pblkno, b_blkno, and b_lblkno fields which allows access to disks larger than a Terabyte in size. This change also requires that the VOP_BMAP vnode operation accept and return daddr64_t blocks. This delta should not affect system operation in any way. It merely sets up the necessary interfaces to allow the development of disk drivers that work with these larger disk block addresses. It also allows for the development of UFS2 which will use 64-bit block addresses.
|
#
1166fb51 |
|
25-May-2001 |
Ruslan Ermilov <ru@FreeBSD.org> |
- sys/msdosfs moved to sys/fs/msdosfs - msdos.ko renamed to msdosfs.ko - /usr/include/msdosfs moved to /usr/include/fs/msdosfs
|
#
60fb0ce3 |
|
28-Apr-2001 |
Greg Lehey <grog@FreeBSD.org> |
Revert consequences of changes to mount.h, part 2. Requested by: bde
|
#
d98dc34f |
|
23-Apr-2001 |
Greg Lehey <grog@FreeBSD.org> |
Correct #includes to work with fixed sys/mount.h.
|
#
9626b608 |
|
05-May-2000 |
Poul-Henning Kamp <phk@FreeBSD.org> |
Separate the struct bio related stuff out of <sys/buf.h> into <sys/bio.h>. <sys/bio.h> is now a prerequisite for <sys/buf.h> but it shall not be made a nested include according to bdes teachings on the subject of nested includes. Diskdrivers and similar stuff below specfs::strategy() should no longer need to include <sys/buf.> unless they need caching of data. Still a few bogus uses of struct buf to track down. Repocopy by: peter
|
#
01f6cfba |
|
27-Jan-2000 |
Yoshihiro Takahashi <nyan@FreeBSD.org> |
Supported non-512 bytes/sector format. PR: misc/12992 Submitted by: chi@bd.mbn.or.jp (Chiharu Shibata) and Dmitrij Tejblum <tejblum@arc.hq.cti.ru> Reviewed by: Dmitrij Tejblum <tejblum@arc.hq.cti.ru>
|
#
c3aac50f |
|
27-Aug-1999 |
Peter Wemm <peter@FreeBSD.org> |
$Id$ -> $FreeBSD$
|
#
c1087c13 |
|
15-Apr-1998 |
Bruce Evans <bde@FreeBSD.org> |
Support compiling with `gcc -ansi'.
|
#
7cd5051b |
|
06-Apr-1998 |
Poul-Henning Kamp <phk@FreeBSD.org> |
Use random() rather then than homegrown stuff.
|
#
32d3966f |
|
28-Mar-1998 |
Andrey A. Chernov <ache@FreeBSD.org> |
Fix dead hang writing to FAT Submitted by: Dmitrij Tejblum <dima@tejblum.dnttm.rssi.ru>
|
#
39e4376b |
|
20-Feb-1998 |
Bruce Evans <bde@FreeBSD.org> |
Removed unused #includes.
|
#
952a6212 |
|
18-Feb-1998 |
Jordan K. Hubbard <jkh@FreeBSD.org> |
Update MSDOSFS code using NetBSD's msdosfs as a guide to support FAT32 partitions. Unfortunately, we looked around here at Walnut Creek CDROM for any newer FAT32-supporting versions of Win95 and we were unsuccessful; only the older stuff here. So this is untested beyond simply making sure it compiles and someone with access to an actual FAT32 fs will have to let us know how well it actually works. Submitted by: Dmitrij Tejblum <dima@tejblum.dnttm.rssi.ru> Obtained from: NetBSD
|
#
303b270b |
|
08-Feb-1998 |
Eivind Eklund <eivind@FreeBSD.org> |
Staticize.
|
#
0b08f5f7 |
|
05-Feb-1998 |
Eivind Eklund <eivind@FreeBSD.org> |
Back out DIAGNOSTIC changes.
|
#
47cfdb16 |
|
04-Feb-1998 |
Eivind Eklund <eivind@FreeBSD.org> |
Turn DIAGNOSTIC into a new-style option.
|
#
e4ba6a82 |
|
02-Sep-1997 |
Bruce Evans <bde@FreeBSD.org> |
Removed unused #includes.
|
#
6875d254 |
|
22-Feb-1997 |
Peter Wemm <peter@FreeBSD.org> |
Back out part 1 of the MCFH that changed $Id$ to $FreeBSD$. We are not ready for it yet.
|
#
1130b656 |
|
14-Jan-1997 |
Jordan K. Hubbard <jkh@FreeBSD.org> |
Make the long-awaited change from $Id$ to $FreeBSD$ This will make a number of things easier in the future, as well as (finally!) avoiding the Id-smashing problem which has plagued developers for so long. Boy, I'm glad we're not using sup anymore. This update would have been insane otherwise.
|
#
58c27bcf |
|
03-Dec-1995 |
Bruce Evans <bde@FreeBSD.org> |
Added prototypes.
|
#
7fefffee |
|
07-Nov-1995 |
Poul-Henning Kamp <phk@FreeBSD.org> |
staticize private parts.
|
#
a98ca469 |
|
29-Oct-1995 |
Poul-Henning Kamp <phk@FreeBSD.org> |
Second batch of cleanup changes. This time mostly making a lot of things static and some unused variables here and there.
|
#
9b2e5354 |
|
30-May-1995 |
Rodney W. Grimes <rgrimes@FreeBSD.org> |
Remove trailing whitespace.
|
#
82f19691 |
|
11-Apr-1995 |
Bruce Evans <bde@FreeBSD.org> |
Submitted by: Wolfgang Solfrank <ws@tools.de> Fix off-by-1-sector error in the range checking for the end of the root directory. It was possible for the root directory to overwrite the FAT.
|
#
24d4540c |
|
10-Feb-1995 |
Bruce Evans <bde@FreeBSD.org> |
Use the correct block number for updating the backup copy of the FAT when deleting a file. Deleting a large file used to scramble the backup copy.
|
#
63e4f22a |
|
11-Dec-1994 |
Bruce Evans <bde@FreeBSD.org> |
Fix numerous timestamp bugs. DE_UPDATE was confused with DE_MODIFIED in some places (they do have confusing names). Handle them exactly the same as IN_UPDATE and IN_MODIFIED. This fixes chmod() and chown() clobbering the mtime and other bugs. DE_MODIFIED was set but not used. Parenthesize macro args. DE_TIMES() now takes a timeval arg instead of a timespec arg. It was stupid to use a macro for speed and do unused conversions to prepare for the macro. Restore the left shifting of the DOS seconds count by 1. It got lost among the shifts for the bitfields, so DOS seconds counts appeared to range from 0 to 29 seconds (step 1) instead of 0 to 58 seconds (step 2). Actually use the passed-in mtime in deupdat() as documented so that utimes() works. Change `extern __inline's to `static inline's so that msdosfs_fat.o can be linked when it is compiled without -O. Remove faking of directory mtimes to always be the current time. It's more surprising for directory mtimes to change when you read the directories than for them not to change when you write the directories. This should be controlled by a mount-time option if at all.
|
#
f0707215 |
|
10-Oct-1994 |
Poul-Henning Kamp <phk@FreeBSD.org> |
Cosmetics. Silence gcc -Wall
|
#
c3c6d51e |
|
27-Sep-1994 |
Poul-Henning Kamp <phk@FreeBSD.org> |
Added declarations, fixed bugs due to missing decls. At least one of them could panic a system. (I know, it paniced mine!).
|
#
27a0bc89 |
|
19-Sep-1994 |
Doug Rabson <dfr@FreeBSD.org> |
Added msdosfs. Obtained from: NetBSD
|