History log of /src/sys/ufs/lfs/ulfs_readwrite.c |
Revision | | Date | Author | Comments |
1.28 |
| 20-Oct-2021 |
thorpej | Overhaul of the EVFILT_VNODE kevent(2) filter:
- Centralize vnode kevent handling in the VOP_*() wrappers, rather than forcing each individual file system to deal with it (except VOP_RENAME(), because VOP_RENAME() is a mess and we currently have 2 different ways of handling it; at least it's reasonably well-centralized in the "new" way). - Add support for NOTE_OPEN, NOTE_CLOSE, NOTE_CLOSE_WRITE, and NOTE_READ, compatible with the same events in FreeBSD. - Track which kevent notifications clients are interested in receiving to avoid doing work for events no one cares about (avoiding, e.g. taking locks and traversing the klist to send a NOTE_WRITE when someone is merely watching for a file to be deleted, for example).
In support of the above:
- Add support in vnode_if.sh for specifying PRE- and POST-op handlers, to be invoked before and after vop_pre() and vop_post(), respectively. Basic idea from FreeBSD, but implemented differently. - Add support in vnode_if.sh for specifying CONTEXT fields in the vop_*_args structures. These context fields are used to convey information between the file system VOP function and the VOP wrapper, but do not occupy an argument slot in the VOP_*() call itself. These context fields are initialized and subsequently interpreted by PRE- and POST-op handlers. - Version VOP_REMOVE(), uses the a context field for the file system to report back the resulting link count of the target vnode. Return this in tmpfs, udf, nfs, chfs, ext2fs, lfs, and ufs.
NetBSD 9.99.92.
|
1.27 |
| 23-Apr-2020 |
ad | PR kern/54759 (vm.ubc_direct deadlock when read()/write() into mapping of itself)
- Add new flag UBC_ISMAPPED which tells ubc_uiomove() the object is mmap()ed somewhere. Use it to decide whether to do direct-mapped copy, rather than poking around directly in the vnode in ubc_uiomove(), which is ugly and doesn't work for tmpfs. It would be nicer to contain all this in UVM but the filesystem provides the needed locking here (VV_MAPPED) and to reinvent that would suck more.
- Rename UBC_UNMAP_FLAG() to UBC_VNODE_FLAGS(). Pass in UBC_ISMAPPED where appropriate.
|
1.26 |
| 23-Feb-2020 |
ad | branches: 1.26.4; UVM locking changes, proposed on tech-kern:
- Change the lock on uvm_object, vm_amap and vm_anon to be a RW lock. - Break v_interlock and vmobjlock apart. v_interlock remains a mutex. - Do partial PV list locking in the x86 pmap. Others to follow later.
|
1.25 |
| 20-Jun-2019 |
christos | branches: 1.25.4; unifdef -DLFS_READWRITE ulfs_readwrite.c
|
1.24 |
| 10-Jun-2017 |
maya | branches: 1.24.6; Rename i_flag to i_state.
The similarity to i_flags has previously caused errors.
|
1.23 |
| 30-Mar-2017 |
hannken | branches: 1.23.6; Remove now redundant calls to fstrans_start()/fstrans_done().
Add fstrans_start()/fstrans_done() to lfs_putpages().
|
1.22 |
| 20-Jun-2016 |
dholland | branches: 1.22.2; 1.22.4; One more batch of already-synced ufs changes:
ufs_extern.h 1.79 is equivalent to ulfs_extern.h 1.14 ufsmount.h 1.43 is (roughly) equivalent to lfs_extern.h 1.102 ufs_inode.c 1.94 does not apply to lfs ufs_inode.c 1.95 does not apply to lfs either ufs_readwrite.c 1.108 is equivalent to ulfs_readwrite.c 1.8 ufs_readwrite.c 1.109 is equivalent to ulfs_readwrite.c 1.9 ufs_readwrite.c 1.110 is equivalent to ulfs_readwrite.c 1.10 ufs_readwrite.c 1.111 does not apply to lfs ufs_readwrite.c 1.112 is equivalent to ulfs_readwrite.c 1.11 ufs_readwrite.c 1.113 is equivalent to ulfs_readwrite.c 1.13 ufs_readwrite.c 1.114 is equivalent to ulfs_readwrite.c 1.14 ufs_readwrite.c 1.115 is equivalent to ulfs_readwrite.c 1.15 ufs_readwrite.c 1.116-1.118 does not apply to lfs ufs_readwrite.c 1.119-1.120 are equivalent to ulfs_readwrite.c 1.16 ufs_rename.c 1.12 is equivalent to lfs_rename.c 1.8 ufs_vnops.c 1.226 is equivalent to ulfs_vnops.c 1.22 and lfs_vnops.c 1.270 ufs_vnops.c 1.227 is equivalent to ulfs_vnops.c 1.23 ufs_vnops.c 1.228-1.229 are equivalent to ulfs_vnops.c 1.24 ufs_vnops.c 1.230 is equivalent to ulfs_vnops.c 1.25 and lfs_vnops.c 1.271 ufs_vnops.c 1.231 originated in lfs ufs_vnops.c 1.232 does not apply to lfs
|
1.21 |
| 19-Jun-2016 |
dholland | Mark ufs file versions we're already synced with.
|
1.20 |
| 23-Nov-2015 |
mlelstv | fix assertion checking that bufrd function is used only for large symlinks that aren't embedded in the inode.
|
1.19 |
| 24-Jul-2015 |
dholland | More lfs superblock accessors. (This changes the rest of the code over; all the accessors were already added.)
The difference between this commit and the previous one is arbitrary, but the previous one passed the regression tests on its own so I'm keeping it separate to help with any bisections that might be needed in the future.
|
1.18 |
| 24-Jul-2015 |
dholland | Switch to accessor functions for elements of the LFS on-disk superblock. This will allow switching between 32/64 bit forms on the fly; it will also allow handling LFS_EI reasonably tidily. (That currently doesn't work on the superblock.)
It also gets rid of cpp abuse in the form of fake structure member macros.
Also, instead of doing sleep/wakeup on &lfs_avail and &lfs_nextseg inside the on-disk superblock, add extra elements to the in-memory struct lfs for this. (XXX: these should be changed to condvars, but not right now)
XXX: this migrates a structure needed by the lfs code in libsa (struct salfs) into lfs.h, where it doesn't belong, but for the time being this is necessary in order to allow the accessors (and the various lfs macros and other goop that relies on them) to compile.
|
1.17 |
| 12-Apr-2015 |
riastradh | Strip IO_JOURNALLOCKED, PGO_JOURNALLOCKED out of ulfs_readwrite.c.
These are vestigial from ufs_readwrite.c with wapbl -- lfs does not have a journal but only the explicit wapbl calls, not these flags, got ripped out in the transition to ulfs_readwrite.c.
|
1.16 |
| 12-Apr-2015 |
riastradh | Same putpages->kassert in ulfs_readwrite.c
|
1.15 |
| 28-Mar-2015 |
maxv | Remove the 'cred' argument from bread(). Remove a now unused var in ffs_snapshot.c. Update the man page accordingly.
ok hannken@
|
1.14 |
| 28-Mar-2015 |
riastradh | Let I/O errors override inode update errors in UFS.
Fixes tests/fs/vfs/t_io:read_fault for UFS.
|
1.13 |
| 28-Mar-2015 |
maxv | Remove the 'cred' argument from breadn(), and update the man page accordingly.
ok hannken@
|
1.12 |
| 28-Mar-2015 |
riastradh | Make some comments match better in ulfs_readwrite.
|
1.11 |
| 28-Mar-2015 |
riastradh | Factor out post-read/write inode updates in UFS.
|
1.10 |
| 28-Mar-2015 |
riastradh | Turn some `#if DIAGNOSTIC' into KASSERT.
|
1.9 |
| 27-Mar-2015 |
riastradh | Tighten some kasserts in ufs_bufio code paths.
|
1.8 |
| 27-Mar-2015 |
riastradh | Disentangle buffer-cached I/O from page-cached I/O in UFS.
Page-cached I/O is used for regular files, and is initiated by VFS users such as userland and NFS.
Buffer-cached I/O is used for directories and symlinks, and is issued only internally by UFS.
New UFS routine ufs_bufio replaces vn_rdwr for internal use. ufs_bufio is implemented by new UFS operations uo_bufrd/uo_bufwr, which sit in ufs_readwrite.c alongside the VOP_READ/VOP_WRITE implementations.
I preserved the code as much as possible and will leave further simplification for future commits. I kept the ulfs_readwrite.c copypasta close to ufs_readwrite.c in case we ever want to merge them back; likewise ext2fs_readwrite.c.
No externally visible semantic change. All atf fs tests still pass.
|
1.7 |
| 17-Oct-2013 |
christos | branches: 1.7.4; 1.7.8; - remove unused variables - add debug ifdefs for debugging variables - __USE() where appropriate.
|
1.6 |
| 28-Jul-2013 |
dholland | Migrate the miscellaneous ulfs-level info from struct ulfsmount to struct lfs.
Put them inside #ifdef _KERNEL there. They are not the only such members, gross as that is. Unfortunately, moving struct lfs to lfs_kernel.h does not work.
|
1.5 |
| 28-Jul-2013 |
dholland | Remove the now-pointless ulfs ops macros.
|
1.4 |
| 18-Jun-2013 |
christos | branches: 1.4.2; 1.4.4; Prefix most of the cpp macros with lfs_ and LFS_ to avoid conflicts with ffs. This was done so that boot blocks that want to compile both FFS and LFS in the same file work.
|
1.3 |
| 08-Jun-2013 |
dholland | There is no WAPBL in LFS.
|
1.2 |
| 06-Jun-2013 |
dholland | Split lfs from ufs step 4:
Massedit all ufs symbols to be "ulfs" instead, to make sure there are no conflicts with ufs. Confirmed with grep.
(This required changing a few comments that maybe should have been left alone to say "ulfs", but we'll survive that.)
|
1.1 |
| 06-Jun-2013 |
dholland | Split lfs from ufs, part 1: cut and paste 15000 lines of ufs as "ulfs".
These are verbatim copies except that I've preserved the ufs rcsids for reference. Also, ufs/quota.h -> ulfs_quotacommon.h ufs/ufs_quota.h -> ulfs_quota.h
Splitting lfs from ufs was ok'd by core some years ago. This is not from my original tree, which became unmergeable after the several sets of quota changes; I've done the work over again over the last couple days.
|
1.4.4.2 |
| 18-May-2014 |
rmind | sync with head
|
1.4.4.1 |
| 28-Aug-2013 |
rmind | sync with head
|
1.4.2.4 |
| 03-Dec-2017 |
jdolecek | update from HEAD
|
1.4.2.3 |
| 20-Aug-2014 |
tls | Rebase to HEAD as of a few days ago.
|
1.4.2.2 |
| 23-Jun-2013 |
tls | resync from head
|
1.4.2.1 |
| 18-Jun-2013 |
tls | file ulfs_readwrite.c was added on branch tls-maxphys on 2013-06-23 06:18:39 +0000
|
1.7.8.5 |
| 28-Aug-2017 |
skrll | Sync with HEAD
|
1.7.8.4 |
| 27-Dec-2015 |
skrll | Sync with HEAD (as of 26th Dec)
|
1.7.8.3 |
| 22-Sep-2015 |
skrll | Sync with HEAD
|
1.7.8.2 |
| 06-Jun-2015 |
skrll | Sync with HEAD
|
1.7.8.1 |
| 06-Apr-2015 |
skrll | Sync with HEAD
|
1.7.4.2 |
| 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
1.7.4.1 |
| 17-Oct-2013 |
yamt | file ulfs_readwrite.c was added on branch yamt-pagecache on 2014-05-22 11:41:19 +0000
|
1.22.4.1 |
| 21-Apr-2017 |
bouyer | Sync with HEAD
|
1.22.2.1 |
| 26-Apr-2017 |
pgoyette | Sync with HEAD
|
1.23.6.1 |
| 30-Oct-2017 |
snj | Pull up following revision(s) (requested by maya in ticket #330): sbin/fsck_lfs/inode.c: 1.69 sbin/fsck_lfs/lfs.c: 1.73 sbin/fsck_lfs/pass6.c: 1.50 sbin/fsck_lfs/segwrite.c: 1.46 sys/ufs/lfs/lfs.h: 1.202-1.203 sys/ufs/lfs/lfs_accessors.h: 1.48 sys/ufs/lfs/lfs_alloc.c: 1.136-1.137 sys/ufs/lfs/lfs_balloc.c: 1.94 sys/ufs/lfs/lfs_bio.c: 1.141 sys/ufs/lfs/lfs_extern.h: 1.113 sys/ufs/lfs/lfs_inode.c: 1.156-1.157 sys/ufs/lfs/lfs_inode.h: 1.20, 1.21, 1.23 sys/ufs/lfs/lfs_itimes.c: 1.20 sys/ufs/lfs/lfs_pages.c: 1.13-1.15 sys/ufs/lfs/lfs_rename.c: 1.22 sys/ufs/lfs/lfs_segment.c: 1.270-1.275 sys/ufs/lfs/lfs_subr.c: 1.94-1.97 sys/ufs/lfs/lfs_syscalls.c: 1.175 sys/ufs/lfs/lfs_vfsops.c: 1.360 sys/ufs/lfs/lfs_vnops.c: 1.316-1.321 sys/ufs/lfs/ulfs_inode.c: 1.20 sys/ufs/lfs/ulfs_inode.h: 1.24 sys/ufs/lfs/ulfs_lookup.c: 1.41 sys/ufs/lfs/ulfs_quota2.c: 1.31 sys/ufs/lfs/ulfs_readwrite.c: 1.24 sys/ufs/lfs/ulfs_vnops.c: 1.49-1.50 Update inode member i_flag --> i_state to keep up with kernel changes Move definition of IN_ALLMOD near the flag it's a mask for. Now we can see that it doesn't match all the flags, but changing that will require more careful thought. Correct confusion between i_flag and i_flags These will have to be renamed. Spotted by Riastradh, thanks! Add an XXX about the missing flags so it's not buried in a commit message. now the XXX count for LFS is 260 Rename i_flag to i_state. The similarity to i_flags has previously caused errors. Use continue to denote the no-op loop to match netbsd style newline for extra clarity. It isn't safe to drain dirops with seglock held, it'll deadlock if there are any dirops. drain before grabbing seglock. lfs_dirops == 0 is always true (as we already drained dirops), so omit that part of the comparison. Fixes a lot of LFS deadlocks. PR kern/52301 Many thanks to dholland for help analyzing coredumps Ifdef out KDASSERT which fires on my machine. Deduplicate sanity check that seglock is held on segunlock Revert r1.272 fix to PR kern/52301, the performance hit is making things unusable. change lfs_nextsegsleep and lfs_allclean_wakeup to use condvar XXX had to use lfs_lock in lfs_segwait, removed kernel_lock, is this appropriate? fix buffer overflow/KASSERT when cookies are supplied lfs no longer uses the ffs-style struct direct, use the correct minimum size from dholland XXX more wrong Consistently use {,UN}MARK_VNODE macros rather than function calls. Not much point doing anything after a panic call Ask some question about the code in a XXX comment XXX question our double-flushing of dirops Fix typo in comment
|
1.24.6.2 |
| 13-Apr-2020 |
martin | Mostly merge changes from HEAD upto 20200411
|
1.24.6.1 |
| 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|
1.25.4.1 |
| 29-Feb-2020 |
ad | Sync with head.
|
1.26.4.1 |
| 25-Apr-2020 |
bouyer | Sync with bouyer-xenpvh-base2 (HEAD)
|