tmp_suning_uos_patched/fs
Al Viro 94bdd655ca parallel lookups machinery, part 3
We will need to be able to check if there is an in-lookup
dentry with matching parent/name.  Right now it's impossible,
but as soon as start locking directories shared such beasts
will appear.

Add a secondary hash for locating those.  Hash chains go through
the same space where d_alias will be once it's not in-lookup anymore.
Search is done under the same bitlock we use for modifications -
with the primary hash we can rely on d_rehash() into the wrong
chain being the worst that could happen, but here the pointers are
buggered once it's removed from the chain.  On the other hand,
the chains are not going to be long and normally we'll end up
adding to the chain anyway.  That allows us to avoid bothering with
->d_lock when doing the comparisons - everything is stable until
removed from chain.

New helper: d_alloc_parallel().  Right now it allocates, verifies
that no hashed and in-lookup matches exist and adds to in-lookup
hash.

Returns ERR_PTR() for error, hashed match (in the unlikely case it's
been found) or new dentry.  In-lookup matches trigger BUG() for
now; that will change in the next commit when we introduce waiting
for ongoing lookup to finish.  Note that in-lookup matches won't be
possible until we actually go for shared locking.

lookup_slow() switched to use of d_alloc_parallel().

Again, these commits are separated only for making it easier to
review.  All this machinery will start doing something useful only
when we go for shared locking; it's just that the combination is
too large for my taste.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2016-05-02 19:49:27 -04:00
..
9p Merge getxattr prototype change into work.lookups 2016-05-02 19:45:47 -04:00
adfs
affs mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
afs make ext2_get_page() and friends work without external serialization 2016-05-02 19:47:25 -04:00
autofs4 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2016-03-19 18:52:29 -07:00
befs
bfs
btrfs Merge getxattr prototype change into work.lookups 2016-05-02 19:45:47 -04:00
cachefiles mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
ceph Merge getxattr prototype change into work.lookups 2016-05-02 19:45:47 -04:00
cifs Merge getxattr prototype change into work.lookups 2016-05-02 19:45:47 -04:00
coda
configfs configfs_detach_prep(): make sure that wait_mutex won't go away 2016-05-02 19:47:22 -04:00
cramfs mm, fs: remove remaining PAGE_CACHE_* and page_cache_{get,release} usage 2016-04-04 10:41:08 -07:00
crypto mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
debugfs
devpts
dlm mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
ecryptfs Merge getxattr prototype change into work.lookups 2016-05-02 19:45:47 -04:00
efivarfs mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
efs don't bother with ->d_inode->i_sb - it's always equal to ->d_sb 2016-04-10 17:11:51 -04:00
exofs make ext2_get_page() and friends work without external serialization 2016-05-02 19:47:25 -04:00
exportfs reconnect_one(): use lookup_one_len_unlocked() 2016-05-02 19:47:24 -04:00
ext2 make ext2_get_page() and friends work without external serialization 2016-05-02 19:47:25 -04:00
ext4 Merge getxattr prototype change into work.lookups 2016-05-02 19:45:47 -04:00
f2fs Merge getxattr prototype change into work.lookups 2016-05-02 19:45:47 -04:00
fat fat: add config option to set UTF-8 mount option by default 2016-03-22 15:36:02 -07:00
freevxfs mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
fscache mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
fuse Merge getxattr prototype change into work.lookups 2016-05-02 19:45:47 -04:00
gfs2 Merge getxattr prototype change into work.lookups 2016-05-02 19:45:47 -04:00
hfs Merge getxattr prototype change into work.lookups 2016-05-02 19:45:47 -04:00
hfsplus Merge getxattr prototype change into work.lookups 2016-05-02 19:45:47 -04:00
hostfs mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
hpfs
hugetlbfs mm, fs: remove remaining PAGE_CACHE_* and page_cache_{get,release} usage 2016-04-04 10:41:08 -07:00
isofs mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
jbd2 mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
jffs2 Merge getxattr prototype change into work.lookups 2016-05-02 19:45:47 -04:00
jfs Merge getxattr prototype change into work.lookups 2016-05-02 19:45:47 -04:00
kernfs kernfs: use lookup_one_len_unlocked() 2016-05-02 19:47:21 -04:00
lockd
logfs mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
minix mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
ncpfs mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
nfs nfs: missing wakeup in nfs_unblock_sillyrename() 2016-05-02 19:47:25 -04:00
nfs_common
nfsd don't bother with ->d_inode->i_sb - it's always equal to ->d_sb 2016-04-10 17:11:51 -04:00
nilfs2 make ext2_get_page() and friends work without external serialization 2016-05-02 19:47:25 -04:00
nls
notify
ntfs mm, fs: remove remaining PAGE_CACHE_* and page_cache_{get,release} usage 2016-04-04 10:41:08 -07:00
ocfs2 ocfs2: don't open-code inode_lock/inode_unlock 2016-05-02 19:47:22 -04:00
omfs
openpromfs
orangefs orangefs: don't open-code inode_lock/inode_unlock 2016-05-02 19:47:23 -04:00
overlayfs ovl_lookup_real(): use lookup_one_len_unlocked() 2016-05-02 19:47:24 -04:00
proc mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
pstore mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
qnx4
qnx6 mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
quota quota: Handle Q_GETNEXTQUOTA when quota is disabled 2016-03-29 17:20:10 +02:00
ramfs mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
reiserfs reiserfs: open-code reiserfs_mutex_lock_safe() in reiserfs_unpack() 2016-05-02 19:47:23 -04:00
romfs
squashfs Merge getxattr prototype change into work.lookups 2016-05-02 19:45:47 -04:00
sysfs
sysv mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
tracefs
ubifs Merge getxattr prototype change into work.lookups 2016-05-02 19:45:47 -04:00
udf Merge getxattr prototype change into work.lookups 2016-05-02 19:45:47 -04:00
ufs make ext2_get_page() and friends work without external serialization 2016-05-02 19:47:25 -04:00
xfs Merge getxattr prototype change into work.lookups 2016-05-02 19:45:47 -04:00
aio.c
anon_inodes.c
attr.c
bad_inode.c ->getxattr(): pass dentry and inode as separate arguments 2016-04-11 00:48:00 -04:00
binfmt_aout.c
binfmt_elf_fdpic.c mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
binfmt_elf.c mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
binfmt_em86.c
binfmt_flat.c
binfmt_misc.c
binfmt_script.c
block_dev.c mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
buffer.c mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
char_dev.c
compat_binfmt_elf.c
compat_ioctl.c
compat.c
coredump.c fs/coredump: prevent fsuid=0 dumps into user-controlled directories 2016-03-22 15:36:02 -07:00
dax.c mm, fs: remove remaining PAGE_CACHE_* and page_cache_{get,release} usage 2016-04-04 10:41:08 -07:00
dcache.c parallel lookups machinery, part 3 2016-05-02 19:49:27 -04:00
dcookies.c
direct-io.c mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
drop_caches.c
eventfd.c eventfd: document lockless access in eventfd_poll 2016-03-22 15:36:02 -07:00
eventpoll.c timer: convert timer_slack_ns from unsigned long to u64 2016-03-17 15:09:34 -07:00
exec.c Merge branch 'mm-pkeys-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2016-03-20 19:08:56 -07:00
fcntl.c
fhandle.c fs/coredump: prevent fsuid=0 dumps into user-controlled directories 2016-03-22 15:36:02 -07:00
file_table.c
file.c
filesystems.c
fs_pin.c
fs_struct.c
fs-writeback.c mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
inode.c parallel lookups machinery, part 2 2016-05-02 19:49:26 -04:00
internal.h
ioctl.c
Kconfig Merge tag 'ofs-pull-tag-1' of git://git.kernel.org/pub/scm/linux/kernel/git/hubcap/linux 2016-03-26 12:59:04 -07:00
Kconfig.binfmt
libfs.c Merge getxattr prototype change into work.lookups 2016-05-02 19:45:47 -04:00
locks.c
Makefile Merge tag 'ofs-pull-tag-1' of git://git.kernel.org/pub/scm/linux/kernel/git/hubcap/linux 2016-03-26 12:59:04 -07:00
mbcache.c
mount.h
mpage.c mm, fs: remove remaining PAGE_CACHE_* and page_cache_{get,release} usage 2016-04-04 10:41:08 -07:00
namei.c parallel lookups machinery, part 3 2016-05-02 19:49:27 -04:00
namespace.c
no-block.c
nsfs.c
open.c fs/coredump: prevent fsuid=0 dumps into user-controlled directories 2016-03-22 15:36:02 -07:00
pipe.c mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
pnode.c
pnode.h
posix_acl.c xattr_handler: pass dentry and inode as separate arguments of ->get() 2016-04-10 20:48:24 -04:00
proc_namespace.c
read_write.c Merge branches 'work.lookups', 'work.misc' and 'work.preadv2' into for-next 2016-03-18 16:07:38 -04:00
readdir.c
select.c timer: convert timer_slack_ns from unsigned long to u64 2016-03-17 15:09:34 -07:00
seq_file.c
signalfd.c
splice.c mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
stack.c
stat.c
statfs.c
super.c
sync.c mm, fs: get rid of PAGE_CACHE_* and page_cache_{get,release} macros 2016-04-04 10:41:08 -07:00
timerfd.c
userfaultfd.c
utimes.c
xattr.c ->getxattr(): pass dentry and inode as separate arguments 2016-04-11 00:48:00 -04:00