Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 231528
b: refs/heads/master
c: f03c659
h: refs/heads/master
v: v3
  • Loading branch information
Al Viro committed Jan 16, 2011
1 parent 02580d1 commit 783bc4b
Show file tree
Hide file tree
Showing 11 changed files with 76 additions and 118 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 7b8a53fd815deb39542085897743fa0063f9fe06
refs/heads/master: f03c65993b98eeb909a4012ce7833c5857d74755
2 changes: 1 addition & 1 deletion trunk/drivers/mtd/mtdchar.c
Original file line number Diff line number Diff line change
Expand Up @@ -1201,7 +1201,7 @@ static int __init init_mtdchar(void)
static void __exit cleanup_mtdchar(void)
{
unregister_mtd_user(&mtdchar_notifier);
mntput_long(mtd_inode_mnt);
mntput(mtd_inode_mnt);
unregister_filesystem(&mtd_inodefs_type);
__unregister_chrdev(MTD_CHAR_MAJOR, 0, 1 << MINORBITS, "mtd");
}
Expand Down
2 changes: 1 addition & 1 deletion trunk/fs/anon_inodes.c
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ static int __init anon_inode_init(void)
return 0;

err_mntput:
mntput_long(anon_inode_mnt);
mntput(anon_inode_mnt);
err_unregister_filesystem:
unregister_filesystem(&anon_inode_fs_type);
err_exit:
Expand Down
35 changes: 24 additions & 11 deletions trunk/fs/fs_struct.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,19 @@
#include <linux/path.h>
#include <linux/slab.h>
#include <linux/fs_struct.h>
#include "internal.h"

static inline void path_get_longterm(struct path *path)
{
path_get(path);
mnt_make_longterm(path->mnt);
}

static inline void path_put_longterm(struct path *path)
{
mnt_make_shortterm(path->mnt);
path_put(path);
}

/*
* Replace the fs->{rootmnt,root} with {mnt,dentry}. Put the old values.
Expand All @@ -17,11 +30,11 @@ void set_fs_root(struct fs_struct *fs, struct path *path)
write_seqcount_begin(&fs->seq);
old_root = fs->root;
fs->root = *path;
path_get_long(path);
path_get_longterm(path);
write_seqcount_end(&fs->seq);
spin_unlock(&fs->lock);
if (old_root.dentry)
path_put_long(&old_root);
path_put_longterm(&old_root);
}

/*
Expand All @@ -36,12 +49,12 @@ void set_fs_pwd(struct fs_struct *fs, struct path *path)
write_seqcount_begin(&fs->seq);
old_pwd = fs->pwd;
fs->pwd = *path;
path_get_long(path);
path_get_longterm(path);
write_seqcount_end(&fs->seq);
spin_unlock(&fs->lock);

if (old_pwd.dentry)
path_put_long(&old_pwd);
path_put_longterm(&old_pwd);
}

void chroot_fs_refs(struct path *old_root, struct path *new_root)
Expand All @@ -59,13 +72,13 @@ void chroot_fs_refs(struct path *old_root, struct path *new_root)
write_seqcount_begin(&fs->seq);
if (fs->root.dentry == old_root->dentry
&& fs->root.mnt == old_root->mnt) {
path_get_long(new_root);
path_get_longterm(new_root);
fs->root = *new_root;
count++;
}
if (fs->pwd.dentry == old_root->dentry
&& fs->pwd.mnt == old_root->mnt) {
path_get_long(new_root);
path_get_longterm(new_root);
fs->pwd = *new_root;
count++;
}
Expand All @@ -76,13 +89,13 @@ void chroot_fs_refs(struct path *old_root, struct path *new_root)
} while_each_thread(g, p);
read_unlock(&tasklist_lock);
while (count--)
path_put_long(old_root);
path_put_longterm(old_root);
}

void free_fs_struct(struct fs_struct *fs)
{
path_put_long(&fs->root);
path_put_long(&fs->pwd);
path_put_longterm(&fs->root);
path_put_longterm(&fs->pwd);
kmem_cache_free(fs_cachep, fs);
}

Expand Down Expand Up @@ -118,9 +131,9 @@ struct fs_struct *copy_fs_struct(struct fs_struct *old)

spin_lock(&old->lock);
fs->root = old->root;
path_get_long(&fs->root);
path_get_longterm(&fs->root);
fs->pwd = old->pwd;
path_get_long(&fs->pwd);
path_get_longterm(&fs->pwd);
spin_unlock(&old->lock);
}
return fs;
Expand Down
3 changes: 3 additions & 0 deletions trunk/fs/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,9 @@ extern struct vfsmount *copy_tree(struct vfsmount *, struct dentry *, int);
extern int do_add_mount(struct vfsmount *, struct path *, int);
extern void mnt_clear_expiry(struct vfsmount *);

extern void mnt_make_longterm(struct vfsmount *);
extern void mnt_make_shortterm(struct vfsmount *);

extern void __init mnt_init(void);

DECLARE_BRLOCK(vfsmount_lock);
Expand Down
24 changes: 0 additions & 24 deletions trunk/fs/namei.c
Original file line number Diff line number Diff line change
Expand Up @@ -367,18 +367,6 @@ void path_get(struct path *path)
}
EXPORT_SYMBOL(path_get);

/**
* path_get_long - get a long reference to a path
* @path: path to get the reference to
*
* Given a path increment the reference count to the dentry and the vfsmount.
*/
void path_get_long(struct path *path)
{
mntget_long(path->mnt);
dget(path->dentry);
}

/**
* path_put - put a reference to a path
* @path: path to put the reference to
Expand All @@ -392,18 +380,6 @@ void path_put(struct path *path)
}
EXPORT_SYMBOL(path_put);

/**
* path_put_long - put a long reference to a path
* @path: path to put the reference to
*
* Given a path decrement the reference count to the dentry and the vfsmount.
*/
void path_put_long(struct path *path)
{
dput(path->dentry);
mntput_long(path->mnt);
}

/**
* nameidata_drop_rcu - drop this nameidata out of rcu-walk
* @nd: nameidata pathwalk data to drop
Expand Down
Loading

0 comments on commit 783bc4b

Please sign in to comment.