Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs

Pull vfs pile 1 from Al Viro:
 "This is _not_ all; in particular, Miklos' and Jan's stuff is not there
  yet."

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (64 commits)
  ext4: initialization of ext4_li_mtx needs to be done earlier
  debugfs-related mode_t whack-a-mole
  hfsplus: add an ioctl to bless files
  hfsplus: change finder_info to u32
  hfsplus: initialise userflags
  qnx4: new helper - try_extent()
  qnx4: get rid of qnx4_bread/qnx4_getblk
  take removal of PF_FORKNOEXEC to flush_old_exec()
  trim includes in inode.c
  um: uml_dup_mmap() relies on ->mmap_sem being held, but activate_mm() doesn't hold it
  um: embed ->stub_pages[] into mmu_context
  gadgetfs: list_for_each_safe() misuse
  ocfs2: fix leaks on failure exits in module_init
  ecryptfs: make register_filesystem() the last potential failure exit
  ntfs: forgets to unregister sysctls on register_filesystem() failure
  logfs: missing cleanup on register_filesystem() failure
  jfs: mising cleanup on register_filesystem() failure
  make configfs_pin_fs() return root dentry on success
  configfs: configfs_create_dir() has parent dentry in dentry->d_parent
  configfs: sanitize configfs_create()
  ...
This commit is contained in:
Linus Torvalds 2012-03-21 13:36:41 -07:00
commit e2a0883e40
186 changed files with 5363 additions and 4144 deletions

View file

@ -293,7 +293,7 @@ static struct sock *unix_find_socket_byinode(struct inode *i)
spin_lock(&unix_table_lock);
sk_for_each(s, node,
&unix_socket_table[i->i_ino & (UNIX_HASH_SIZE - 1)]) {
struct dentry *dentry = unix_sk(s)->dentry;
struct dentry *dentry = unix_sk(s)->path.dentry;
if (dentry && dentry->d_inode == i) {
sock_hold(s);
@ -377,8 +377,7 @@ static void unix_sock_destructor(struct sock *sk)
static int unix_release_sock(struct sock *sk, int embrion)
{
struct unix_sock *u = unix_sk(sk);
struct dentry *dentry;
struct vfsmount *mnt;
struct path path;
struct sock *skpair;
struct sk_buff *skb;
int state;
@ -389,10 +388,9 @@ static int unix_release_sock(struct sock *sk, int embrion)
unix_state_lock(sk);
sock_orphan(sk);
sk->sk_shutdown = SHUTDOWN_MASK;
dentry = u->dentry;
u->dentry = NULL;
mnt = u->mnt;
u->mnt = NULL;
path = u->path;
u->path.dentry = NULL;
u->path.mnt = NULL;
state = sk->sk_state;
sk->sk_state = TCP_CLOSE;
unix_state_unlock(sk);
@ -425,10 +423,8 @@ static int unix_release_sock(struct sock *sk, int embrion)
kfree_skb(skb);
}
if (dentry) {
dput(dentry);
mntput(mnt);
}
if (path.dentry)
path_put(&path);
sock_put(sk);
@ -641,8 +637,8 @@ static struct sock *unix_create1(struct net *net, struct socket *sock)
sk->sk_max_ack_backlog = net->unx.sysctl_max_dgram_qlen;
sk->sk_destruct = unix_sock_destructor;
u = unix_sk(sk);
u->dentry = NULL;
u->mnt = NULL;
u->path.dentry = NULL;
u->path.mnt = NULL;
spin_lock_init(&u->lock);
atomic_long_set(&u->inflight, 0);
INIT_LIST_HEAD(&u->link);
@ -788,7 +784,7 @@ static struct sock *unix_find_other(struct net *net,
goto put_fail;
if (u->sk_type == type)
touch_atime(path.mnt, path.dentry);
touch_atime(&path);
path_put(&path);
@ -802,9 +798,9 @@ static struct sock *unix_find_other(struct net *net,
u = unix_find_socket_byname(net, sunname, len, type, hash);
if (u) {
struct dentry *dentry;
dentry = unix_sk(u)->dentry;
dentry = unix_sk(u)->path.dentry;
if (dentry)
touch_atime(unix_sk(u)->mnt, dentry);
touch_atime(&unix_sk(u)->path);
} else
goto fail;
}
@ -910,8 +906,7 @@ out_mknod_drop_write:
list = &unix_socket_table[addr->hash];
} else {
list = &unix_socket_table[dentry->d_inode->i_ino & (UNIX_HASH_SIZE-1)];
u->dentry = path.dentry;
u->mnt = path.mnt;
u->path = path;
}
err = 0;
@ -1193,9 +1188,9 @@ restart:
atomic_inc(&otheru->addr->refcnt);
newu->addr = otheru->addr;
}
if (otheru->dentry) {
newu->dentry = dget(otheru->dentry);
newu->mnt = mntget(otheru->mnt);
if (otheru->path.dentry) {
path_get(&otheru->path);
newu->path = otheru->path;
}
/* Set credentials */