History log of /src/sys/ufs/lfs/ulfs_lookup.c |
Revision | | Date | Author | Comments |
1.48 |
| 08-Sep-2024 |
rillig | fix a/an grammar in obvious cases
|
1.47 |
| 06-Aug-2022 |
andvar | s/blity/bility/ in various words, mainly in comments.
|
1.46 |
| 05-Sep-2020 |
riastradh | Revert "ufs: Prevent mkdir from choking on deleted directories."
This change made no sense and should not have been committed.
|
1.45 |
| 05-Sep-2020 |
riastradh | ufs: Prevent mkdir from choking on deleted directories.
Fix some missing uvm_vnp_setsize in screw cases while here.
|
1.44 |
| 16-May-2020 |
christos | Add ACL support for FFS. From FreeBSD.
|
1.43 |
| 04-Apr-2020 |
ad | Merge the remaining changes from the ad-namecache branch, affecting namei() and getcwd():
- push vnode locking back as far as possible. - do most lookups directly in the namecache, avoiding vnode locks & refs. - don't block new refs to vnodes across VOP_INACTIVE(). - get shared locks for VOP_LOOKUP() if the file system supports it. - correct lock types for VOP_ACCESS() / VOP_GETATTR() in a few places.
Possible future enhancements:
- make the lookups lockless. - support dotdot lookups by being lockless and inferring absence of chroot. - maybe make it work for layered file systems. - avoid vnode references at the root & cwd.
|
1.42 |
| 14-Mar-2020 |
ad | - Hide the details of SPCF_SHOULDYIELD and related behind a couple of small functions: preempt_point() and preempt_needed().
- preempt(): if the LWP has exceeded its timeslice in kernel, strip it of any priority boost gained earlier from blocking.
|
1.41 |
| 10-Jun-2017 |
maya | branches: 1.41.6; 1.41.12; Rename i_flag to i_state.
The similarity to i_flags has previously caused errors.
|
1.40 |
| 30-Mar-2017 |
hannken | branches: 1.40.6; Remove now redundant calls to fstrans_start()/fstrans_done().
Add fstrans_start()/fstrans_done() to lfs_putpages().
|
1.39 |
| 20-Jun-2016 |
dholland | branches: 1.39.2; 1.39.4; Note more already-merged versions:
inode.h 1.68 is subsumed by ulfs_inode.h 1.19 inode.h 1.69-1.72 do not apply to lfs ufs_extern.h 1.74 was covered when lfs was moved to the new vnode cache ufs_extern.h 1.75 is equivalent to ulfs_extern.h 1.13 ufs_extern.h 1.76-1.77 do not apply to lfs ufsmount.h 1.42 does not apply to lfs ufs_inode.c 1.90 is subsumed by ulfs_inode.c 1.10 ufs_inode.c 1.91-1.92 do not apply to lfs ufs_lookup.c 1.130 is subsumed by ulfs_lookup.c 1.24 ufs_lookup.c 1.131 is equivalent to ulfs_lookup.c 1.20 ufs_lookup.c 1.132 is equivalent to ulfs_lookup.c 1.21 ufs_lookup.c 1.133 is equivalent to ulfs_lookup.c 1.22 ufs_lookup.c 1.134 is equivalent to ulfs_lookup.c 1.23 ufs_lookup.c 1.135 is equivalent to ulfs_lookup.c 1.25 ufs_quota2.c 1.38 is equivalent to ulfs_quota2.c 1.17 ufs_quota2.c 1.39 is equivalent to ulfs_quota2.c 1.16 ufs_quota2.c 1.40 is equivalent to ulfs_quota2.c 1.18 ufs_vfsops.c 1.53 is subsumed by lfs_vfsops.c 1.324 ufs_vfsops.c 1.54 is subsumed by lfs_vfsops.c 1.324 ufs_vnops.c 1.223-1.224 do not apply to lfs
|
1.38 |
| 20-Jun-2016 |
dholland | More already-merged or equivalent changes:
ufs_dirhash.c 1.36 corresponds to ulfs_dirhash.c 1.8 ufs_extattr.c 1.43 corresponds to ulfs_extattr.c 1.7 ufs_lookup.c 1.126 does not apply to lfs ufs_lookup.c 1.127 we already have ufs_lookup.c 1.128 does not apply to lfs ufs_lookup.c 1.129 corresponds to ulfs_lookup.c 1.19 ufs_quota1.c 1.19 corresponds to ulfs_quota1.c 1.7 ufs_quota1.c 1.20 corresponds to ulfs_quota1.c 1.8 ufs_quota2.c 1.36 we have equivalent changes for ufs_rename.c 1.9 corresponds to lfs_rename.c 1.5 ufs_rename.c 1.10 corresponds to lfs_rename.c 1.6 ufs_vnops.c 1.219 corresponds to lfs_vnops.c 1.260 and ulfs_vnops.c 1.19 ufs_vnops.c 1.220 corresponds to lfs_vnops.c 1.261 and ulfs_vnops.c 1.20 ufs_vnops.c 1.221 was superseded by later changes ufs_vnops.c 1.222 got fixed independently in lfs
|
1.37 |
| 19-Jun-2016 |
dholland | we already have ufs_lookup.c 1.125 and ufs_vnops.c 1.218.
|
1.36 |
| 19-Jun-2016 |
dholland | Update the ufs versions these files are synced with by 1: the 201306016 commit by hannken@ that removed references to ffs_snapgone in ufs doesn't need to be synced into lfs.
|
1.35 |
| 14-Nov-2015 |
pgoyette | Remove historic references to wapbl.
|
1.34 |
| 21-Sep-2015 |
dholland | Add 64-bit directory entry structures, and adjust accessors accordingly.
The LFS64 directory entry has a 64-bit inode number. This is stored as two 32-bit values to avoid inducing 64-bit alignment requirements.
The exposed type for manipulating directory entries is now LFS_DIRHEADER, following the same convention as e.g. IFILE and SEGUSE. (But with LFS_ on it, because.)
|
1.33 |
| 21-Sep-2015 |
dholland | Oops; LFS_DIRECTSIZ() is going to need the fs as an argument.
Also, it turns out that dirhash needs a compile-time-constant version of LFS_DIRECTSIZ(LFS_MAXNAMLEN+1), independent of 64-vs-32, so create LFS_MAXDIRENTRYSIZE for this. Sigh.
|
1.32 |
| 15-Sep-2015 |
dholland | Pass around struct lfs_dirheader instead of struct lfs_direct.
|
1.31 |
| 15-Sep-2015 |
dholland | Add an accessor function for directory names.
|
1.30 |
| 15-Sep-2015 |
dholland | Tidyups/fixes preparatory to making d_name[] in struct lfs_direct size 0 instead of size LFS_MAXNAMLEN+1, and preparatory to having accessor functions for d_name. In particular, don't create prototype entries and copy them, and access the name field only for directory structures that are in buffers with space for the name to exist.
|
1.29 |
| 15-Sep-2015 |
dholland | Tidy up ulfs_direnter: don't malloc a temporary struct lfs_direct and double-copy it. Just write to the destination buffer.
|
1.28 |
| 15-Sep-2015 |
dholland | Kill off ulfs_makedirentry; just pass the data to ulfs_direnter instead. For now, move one copy of the code that allocates and fills in a temporary struct lfs_direct to the top of ulfs_direnter; but it should go away shortly.
|
1.27 |
| 15-Sep-2015 |
dholland | Add and use accessor functions for more of the directory entry fields.
|
1.26 |
| 01-Sep-2015 |
dholland | Add new accessors for the d_type and d_namlen fields of struct lfs_direct. Napalm the old byteswap access logic for these.
|
1.25 |
| 11-Jul-2015 |
mlelstv | mp->mnt_stat.f_flag is never set. Use the mnt_flag directly. This will now actually prevent the 'bad dir' panic if the filesystem is read-only.
|
1.24 |
| 31-May-2015 |
hannken | Change lfs from hash table to vcache.
- Change lfs_valloc() to return an inode number and version instead of a vnode and move lfs_ialloc() and lfs_vcreate() to new lfs_init_vnode().
- Add lfs_valloc_fixed() to allocate a known inode, used by kernel roll forward.
- Remove lfs_*ref(), these functions cannot coexist with vcache and their commented behaviour is far away from their implementation.
- Add the cleaner lwp and blockinfo to struct ulfsmount so lfs_loadvnode() may use hints from the cleaner.
- Remove vnode locks from ulfs_lookup() like we did with ufs_lookup().
|
1.23 |
| 28-Mar-2015 |
maxv | Remove the 'cred' argument from breadn(), and update the man page accordingly.
ok hannken@
|
1.22 |
| 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.21 |
| 03-Jun-2014 |
joerg | branches: 1.21.4; Introduce two helper functions to centralise the namecache statistics in vfs_cache.c. Use consistent locking around the per-cpu data.
|
1.20 |
| 25-May-2014 |
hannken | Remove ulfs_checkpath() and ulfs_readdotdot(). These are relics from the pre-genfs_rename era.
|
1.19 |
| 07-Feb-2014 |
hannken | branches: 1.19.2; 1.19.4; Change vnode operation lookup to return the resulting vnode *vpp unlocked. Change cache_lookup() to return an unlocked vnode.
Discussed on tech-kern@
Welcome to 6.99.31
|
1.18 |
| 28-Jan-2014 |
martin | Bogus gcc 4.8 maybe-used-uninitialized warning
|
1.17 |
| 25-Oct-2013 |
martin | Mark a diagnostic-only variable
|
1.16 |
| 17-Oct-2013 |
christos | - remove unused variables - add debug ifdefs for debugging variables - __USE() where appropriate.
|
1.15 |
| 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.14 |
| 28-Jul-2013 |
dholland | Remove the now-pointless ulfs ops macros.
|
1.13 |
| 28-Jul-2013 |
dholland | Get rid of the ulfs_ops table as we only have one fs in here now.
|
1.12 |
| 18-Jun-2013 |
christos | branches: 1.12.2; 1.12.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.11 |
| 08-Jun-2013 |
dholland | ulfs_dir.h has been emptied; remove it.
|
1.10 |
| 08-Jun-2013 |
dholland | There is no WAPBL in LFS.
|
1.9 |
| 08-Jun-2013 |
dholland | DIRBLKSIZ -> LFS_DIRBLKSIZ DIRECTSIZ -> LFS_DIRECTSIZ DIRSIZ -> LFS_DIRSIZ OLDDIRFMT -> LFS_OLDDIRFMT NEWDIRFMT -> LFS_NEWDIRFMT IFTODT -> LFS_IFTODT DTTOIF -> LFS_DTTOIF
|
1.8 |
| 08-Jun-2013 |
dholland | Move stuff to lfs.h that's needed by userland: LFS_DT_* ULFS_ROOTINO ULFS_WINO struct lfs_direct struct lfs_dirtemplate struct lfs_odirtemplate struct ulfs_args
Also fix FFS_MAXNAMLEN -> LFS_MAXNAMLEN in several places.
|
1.7 |
| 08-Jun-2013 |
dholland | struct direct -> struct lfs_direct struct dirtemplate -> struct lfs_dirtemplate struct odirtemplate -> struct lfs_odirtemplate DT_* -> LFS_DT_*
|
1.6 |
| 06-Jun-2013 |
dholland | Apparently we also need to cut and paste ffs_snapgone() in order to be able to link the ufs code.
Instead of actually cutting and pasting it (as it depends on ffs-only things) implement it as panic. Probably we'll be able to demonstrate later that it's unreachable.
XXX: Someone should add snapgone to struct ufs_ops in ufs/ufsmount.h, XXX: and fix ufs/ufs_lookup.c to not hardwire ffs.
|
1.5 |
| 06-Jun-2013 |
dholland | Add lfs_ or ulfs_ in front of extern symbols lacking them, mostly quota-related (and particularly quota2-related) stuff.
|
1.4 |
| 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.3 |
| 06-Jun-2013 |
dholland | Split lfs from ufs step 3: rearrange config stuff. Add new options: LFS_EI LFS_DIRHASH LFS_EXTATTR LFS_EXTATTR_AUTOSTART LFS_QUOTA LFS_QUOTA2
and update code referring to the corresponding FFS and UFS config symbols to use the LFS versions. Disable the one extant reference to APPLE_UFS in the ulfs files. Use opt_lfs.h only, not opt_ffs.h.
|
1.2 |
| 06-Jun-2013 |
dholland | Split lfs from ufs, part 2:
Change all <ufs/ufs/foo.h> includes to <ufs/lfs/ulfs_foo.h>.
|
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.12.4.2 |
| 18-May-2014 |
rmind | sync with head
|
1.12.4.1 |
| 28-Aug-2013 |
rmind | sync with head
|
1.12.2.4 |
| 03-Dec-2017 |
jdolecek | update from HEAD
|
1.12.2.3 |
| 20-Aug-2014 |
tls | Rebase to HEAD as of a few days ago.
|
1.12.2.2 |
| 23-Jun-2013 |
tls | resync from head
|
1.12.2.1 |
| 18-Jun-2013 |
tls | file ulfs_lookup.c was added on branch tls-maxphys on 2013-06-23 06:18:39 +0000
|
1.19.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.19.4.1 |
| 07-Feb-2014 |
yamt | file ulfs_lookup.c was added on branch yamt-pagecache on 2014-05-22 11:41:19 +0000
|
1.19.2.1 |
| 10-Aug-2014 |
tls | Rebase.
|
1.21.4.5 |
| 28-Aug-2017 |
skrll | Sync with HEAD
|
1.21.4.4 |
| 27-Dec-2015 |
skrll | Sync with HEAD (as of 26th Dec)
|
1.21.4.3 |
| 22-Sep-2015 |
skrll | Sync with HEAD
|
1.21.4.2 |
| 06-Jun-2015 |
skrll | Sync with HEAD
|
1.21.4.1 |
| 06-Apr-2015 |
skrll | Sync with HEAD
|
1.39.4.1 |
| 21-Apr-2017 |
bouyer | Sync with HEAD
|
1.39.2.1 |
| 26-Apr-2017 |
pgoyette | Sync with HEAD
|
1.40.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.41.12.1 |
| 19-Jan-2020 |
ad | Set IMNT_SHRLOOKUP and use it for the in-cache case. Need to check what more can be done with tmpfs though, it can probably do the whole lookup.
|
1.41.6.1 |
| 08-Apr-2020 |
martin | Merge changes from current as of 20200406
|