summaryrefslogtreecommitdiffstats
path: root/sys/gnu/ext2fs
Commit message (Collapse)AuthorAgeFilesLines
* Use TAILQ macros for clean/dirty block list processing. Set b_xflagspeter1998-10-313-7/+6
| | | | rather than abusing the list next pointer with a magic number.
* error return assignment was less than ideal. Fix the part that causedpeter1998-10-291-2/+2
| | | | | warnings to be the same as the ffs code. Previously, any error from the UFS_UPDATE() call was lost (I think).
* Use vtruncbuf() to clean out cached blocks on a file shorten rather thanpeter1998-10-291-3/+4
| | | | | the more expensive vinvalbuf(), based on the FFS version of the same routine. I don't have any ext2fs filesystems to test this on.
* Oops, the redundant tests for major numbers weren't redundant here.bde1998-10-271-2/+3
| | | | | | | They checked for the magic major number for the "device" behind mfs mount points. Use a more obvious check for this device. Debugged by: Andrew Gallatin <gallatin@cs.duke.edu>
* Removed redundant bitrotted checks for major numbers instead of updatingbde1998-10-261-4/+2
| | | | them.
* Don't follow null bdevsw pointers. The `major(dev) < nblkdev' test rottedbde1998-10-251-1/+2
| | | | | when bdevsw[] became sparse. We still depend on magic to avoid having to check that (v_rdev) device numbers in vnodes are not NODEV.
* Fixed bloatage of `struct inode'. We used 5 "spare" fields for ext2fs,bde1998-10-134-8/+8
| | | | | | | | | | | | | | but when i_effnlink was added to support soft updates, there was only room for 4 spares. The number of spares was not reduced, so the inode size became 260 (on i386's), or 512 after rounding up by malloc(). Use one spare field in `struct dinode' instead of the 5th spare field in the inode and reduced to 4 spares in the inode so that the size is 256 again. Changed the types of the spares in the inode from int to u_int32_t so that the inode size has more chance of being <= 256 under other arches, and downdated ext2fs to match (it was broken to use ints before rev.1.1).
* Quick fix for not being able to sync all the buffers in boot() ifbde1998-10-032-8/+10
| | | | | | | | | | | | | an ext2fs file system is mounted. The soft update changes added a check for B_DELWRI buffers. This exposed the complete brokenness of the previous quick fix for failing syncs (PR 3571, committed on 1997/08/04). Use a new buffer flag B_DIRTY and don't abuse B_DELWRI. B_DIRTY buffers are still written too late, as broken in the previous fix. This is fairly harmless, because B_DIRTY is only used for bitmap buffers and fsck.ext2 can fix up the bitmaps perfectly. Fixed a race in ULCK_BUF() (bremfree() was outside of the splbio() section).
* Fixed initialization of new inodes. ext2fs doesn't clear inodes whenbde1998-09-291-1/+3
| | | | | | they are deleted, so inodes must be cleared when they are reused, but we didn't clear the indirect blocks. This caused serious filesystem corruption.
* Updated ext2_reload() and ext2_sync(). Locking was broken, and MNT_LAZYbde1998-09-261-42/+63
| | | | | | | | | syncs weren't optimized properly (they probably still aren't, but are bug for bug compatible with ffs). These fixes are mostly academic, since ext2fs is too broken to mount read-write (it apparently doesn't clear indirect blocks). Obtained from: mostly from Lite2
* Fixed missing newlines in messages in ext2_check_descriptors().bde1998-09-261-8/+12
| | | | | | | Fixed vnode and memory leaks after an unlikely (?) error in ext2_mountfs(). Fixed an unconditional memory leak in ext2_unmount().
* Fixed clean flag handling:bde1998-09-262-10/+36
| | | | | | | | | | | | | | | | | | | | | | | Fixes for bugs not shared with ffs: - don't mount unclean filesystems rw unless forced to. - accept EXT2_ERROR_FS (treat it like !EXT2_VALID_FS). We still don't set this or honour the maximal mount count. - don't attempt to print the name of the mount point when mounting an unclean file system, since the name of the previous mount point is unknown and the name of the current mount point is still "". Fixes for bugs shared with ffs until recently: - don't set the clean flag on unmount of an initially-unclean filesystem that was (forcibly) mounted rw. - set the clean flag on rw -> ro update of a mounted initially-clean filesystem. - fixed some style bugs (mostly long lines). The fixes are slightly simpler than for ffs, because the relevant on-disk state is not a simple boolean variable, and the superblock has a core-only extension. Obtained from: parts from ffs_vfsops.c, parts from NetBSD
* Fixed the usual missing permissions checks in mount(). As for cd9660,bde1998-09-091-1/+35
| | | | | | the damage was limited by the default of 0 for vfs.usermount. Obtained from: Lite2 via the -current ffs_vfsops.c
* Don't forget to initialize the inode lock. This bug causedbde1998-09-091-0/+1
| | | | | | | | | surprisingly few problems. Most fields were initialized to the correct values by bzero(), but lk_prio was 0 instead of PINOD (=8), the lk_wmsg was NULL instead of "ext2in", and lk_lockholder was 0 instead of -1. Obtained from: Lite2 via the -current ffs_vfsops.c
* Support compiling with `gcc -pedantic' (don't use hard newlines inbde1998-09-091-19/+20
| | | | (asm) string constants).
* Removed statically configured mount type numbers (MOUNT_*) and allbde1998-09-071-3/+3
| | | | | | | | | references to them. The change a couple of days ago to ignore these numbers in statically configured vfsconf structs was slightly premature because the cd9660, cfs, devfs, ext2fs, nfs vfs's still used MOUNT_* instead of the number in their vfsconf struct.
* Quick fix for breakage of read clustering on non-IDE drives. Readbde1998-08-181-2/+2
| | | | | | | | | | | | | | clustering is obsolescent technology so hardly anyone noticed. On a DORS 32160 SCSI drive with 4 tags, read clustering makes very little difference even for huge sequential reads. However, on a ZIP SCSI drive with 0 tags, the minimum overhead per block is about 40 msec, so very large clusters must be used to get anywhere near the maximum transfer rate. Using clusters consisting of 1 8K block reduces the transfer rate to about 250K/sec. Under msdosfs, missing read clustering is normal and a cluster size of 1 512 byte block reduces the transfer rate to about 25K/sec. Broken in: rev.1.18
* "The releaseing of the reference and lock is not temporary and belongsmsmith1998-08-121-1/+0
| | | | | | | where it is. The reference and lock(s) are acquired just above the code in VREF() and relookup()." Submitted by: Michael Hancock <michaelh@cet.co.jp>
* Fixed printf format errors.bde1998-07-301-2/+2
|
* add anti-panic workaround from chris radek (cradek@in221.inetnebr.com)julian1998-07-301-0/+2
| | | | Not sure why this is needed but but does stop crashes.
* Fixed printf format errors.bde1998-07-113-4/+6
|
* Catch a few corner cases where FreeBSD differs enough from BSD 4.4 tojulian1998-07-081-1/+2
| | | | | confuse Soft updates.. Should solve several "dangling deps" panics.
* VOP_STRATEGY grows an (struct vnode *) argumentjulian1998-07-042-3/+3
| | | | | | as the value in b_vp is often not really what you want. (and needs to be frobbed). more cleanups will follow this. Reviewed by: Bruce Evans <bde@freebsd.org>
* Sync timestamp changes for inodes of special files to disk as latebde1998-07-032-8/+9
| | | | | | | | | | | | | | as possible (when the inode is reclaimed). Temporarily only do this if option UFS_LAZYMOD configured and softupdates aren't enabled. UFS_LAZYMOD is intentionally left out of /sys/conf/options. This is mainly to avoid almost useless disk i/o on battery powered machines. It's silly to write to disk (on the next sync or when the inode becomes inactive) just because someone hit a key or something wrote to the screen or /dev/null. PR: 5577 Previous version reviewed by: phk
* Centralized in-core inode update. Update the in-core inode directlybde1998-07-031-16/+4
| | | | | | | | in ufs_setattr() so that there is no need to pass timestamps to UFS_UPDATE() (everything else just needs the current time). Ignore the passed-in timestamps in UFS_UPDATE() and always call ufs_itimes() (was: itimes()) to do the update. The timestamps are still passed so that all the callers don't need to be changed yet.
* Fixed (?) races in mark_buffer_dirty(). We abuse the buffer cachebde1998-06-211-3/+6
| | | | | | | | | | | | | | by hacking on locked buffers without getblk()ing them, and we didn't even use splbio() to prevent biodone() changing the buffer underneath use when a write completes. I think there was no problem in practice on i386's because the operations on b_flags and numdirtybufs happen to be atomic. We still depend on biodone()'s operations on b_flags not interfering with ours. I think there is only interference for B_ERROR, and this is harmless because errors for async writes are ignored anyway. Don't use mark_buffer_dirty() except for superblock-related metadata. It was used in just one case where ordinary BSD buffering is more natural.
* Removed unused function ll_w_block(). It has always had races duebde1998-06-212-19/+0
| | | | | | | | to not using splbio(), and has rotted a little. The races were probably harmless in practice because this function was only used for superblock updates, and separate superblock updates are probably prevented from running into each other by doing part of the update synchronously.
* Removed unused includes.bde1998-06-211-2/+0
|
* Removed unused includes.bde1998-06-211-1/+0
|
* Added a missing options include.bde1998-06-211-0/+1
|
* Don't use "ffs" in an ext2fs sleep message string.bde1998-05-161-3/+14
| | | | | | | | | | | Don't forget to clear the inode hash lock before returning from ext2_vget() after getnewvnode() fails. Obtained from: rev.1.24 of ffs_vfsops.c (the original patch for the getnewvnode() race). Forgotten in: rev.1.4 here. Removed a duplicate comment. Duplicated in: rev.1.4 here. Fixed the MALLOC() vs getnewvnode() race in ext2_vget(). Obtained from: rev.1.39 of ffs_vfsops.c.
* Abbreviate "ext2fs_fsync" as "e2fsyn" instead of as "extfsn" in a sleepbde1998-05-161-1/+1
| | | | message string.
* In the words of the submitter:msmith1998-05-071-22/+13
| | | | | | | | | | | | | | | | | | | --------- Make callers of namei() responsible for releasing references or locks instead of having the underlying filesystems do it. This eliminates redundancy in all terminal filesystems and makes it possible for stacked transport layers such as umapfs or nullfs to operate correctly. Quality testing was done with testvn, and lat_fs from the lmbench suite. Some NFS client testing courtesy of Patrik Kudo. vop_mknod and vop_symlink still release the returned vpp. vop_rename still releases 4 vnode arguments before it returns. These remaining cases will be corrected in the next set of patches. --------- Submitted by: Michael Hancock <michaelh@cet.co.jp>
* As described by the submitter:msmith1998-05-061-1/+0
| | | | | | | | | | | | | Reverse the VFS_VRELE patch. Reference counting of vnodes does not need to be done per-fs. I noticed this while fixing vfs layering violations. Doing reference counting in generic code is also the preference cited by John Heidemann in recent discussions with him. The implementation of alternative vnode management per-fs is still a valid requirement for some filesystems but will be revisited sometime later, most likely using a different framework. Submitted by: Michael Hancock <michaelh@cet.co.jp>
* Seventy-odd "its" / "it's" typos in comments fixed as per kern/6108.des1998-04-173-3/+3
|
* Support compiling with `gcc -ansi'.bde1998-04-152-9/+9
|
* Eradicate the variable "time" from the kernel, using various measures.phk1998-03-304-9/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | "time" wasn't a atomic variable, so splfoo() protection were needed around any access to it, unless you just wanted the seconds part. Most uses of time.tv_sec now uses the new variable time_second instead. gettime() changed to getmicrotime(0. Remove a couple of unneeded splfoo() protections, the new getmicrotime() is atomic, (until Bruce sets a breakpoint in it). A couple of places needed random data, so use read_random() instead of mucking about with time which isn't random. Add a new nfs_curusec() function. Mark a couple of bogosities involving the now disappeard time variable. Update ffs_update() to avoid the weird "== &time" checks, by fixing the one remaining call that passwd &time as args. Change profiling in ncr.c to use ticks instead of time. Resolution is the same. Add new function "tvtohz()" to avoid the bogus "splfoo(), add time, call hzto() which subtracts time" sequences. Reviewed by: bde
* Moved some #includes from <sys/param.h> nearer to where they are actuallybde1998-03-282-0/+2
| | | | used.
* Add two new functions, get{micro|nano}time.phk1998-03-261-24/+1
| | | | | | | | | | | | They are atomic, but return in essence what is in the "time" variable. gettime() is now a macro front for getmicrotime(). Various patches to use the two new functions instead of the various hacks used in their absence. Some puntuation and grammer patches from Bruce. A couple of XXX comments.
* Make this compile after soft updates integration.eivind1998-03-091-4/+4
| | | | LINTing forgotten by: julian
* Reviewed by: dyson@freebsd.org (john Dyson), dg@root.com (david greenman)julian1998-03-081-1/+10
| | | | | Submitted by: Kirk McKusick (mcKusick@mckusick.com) Obtained from: WHistle development tree
* The intent is to get rid of WILLRELE in vnode_if.src by makingmsmith1998-03-011-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | a complement to all ops that return a vpp, VFS_VRELE. This is initially only for file systems that implement the following ops that do a WILLRELE: vop_create, vop_whiteout, vop_mknod, vop_remove, vop_link, vop_rename, vop_mkdir, vop_rmdir, vop_symlink This is initial DNA that doesn't do anything yet. VFS_VRELE is implemented but not called. A default vfs_vrele was created for fs implementations that use the standard vnode management routines. VFS_VRELE implementations were made for the following file systems: Standard (vfs_vrele) ffs mfs nfs msdosfs devfs ext2fs Custom union umapfs Just EOPNOTSUPP fdesc procfs kernfs portal cd9660 These implementations may change as VOP changes are implemented. In the next phase, in the vop implementations calls to vrele and the vrele part of vput will be moved to the top layer vfs_vnops and made visible to all layers. vput will be replaced by unlock in these cases. Unlocking will still be done in the per fs layer but the refcount decrement will be triggered at the top because it doesn't hurt to hold a vnode reference a little longer. This will have minimal impact on the structure of the existing code. This will only be done for vnode arguments that are released by the various fs vop implementations. Wider use of VFS_VRELE will likely require restructuring of the code. Reviewed by: phk, dyson, terry et. al. Submitted by: Michael Hancock <michaelh@cet.co.jp>
* Style nits and staticism with the previous commit.msmith1998-03-011-6/+6
| | | | Submitted by: bde
* Add local stup putpages/getpages routines.msmith1998-03-011-0/+33
| | | | Submitted by: Terry Lambert <terry@freebsd.org>
* Fixed configuration and linkage of ext2_checkoverlap().bde1998-02-132-8/+5
|
* Staticize.eivind1998-02-091-4/+4
|
* Back out DIAGNOSTIC changes.eivind1998-02-068-15/+2
|
* Turn DIAGNOSTIC into a new-style option.eivind1998-02-048-2/+15
|
* Make LINT at least compile. This faithfully duplicate the changeseivind1998-02-041-8/+8
| | | | | done to ufs/ufs/ufs_vnops.c for the same problem, but I don't know if that will actually make SUIDDIR work for ext2fs.
* Retire LFS.phk1998-01-302-6/+2
| | | | | | | | | | | | If you want to play with it, you can find the final version of the code in the repository the tag LFS_RETIREMENT. If somebody makes LFS work again, adding it back is certainly desireable, but as it is now nobody seems to care much about it, and it has suffered considerable bitrot since its somewhat haphazard integration. R.I.P
OpenPOWER on IntegriCloud