diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2010-02-11 02:24:46 -0500 |
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2010-02-19 03:35:12 -0500 |
| commit | c44dcc56d2b5c79ba3063d20f76e5347e2e418f6 (patch) | |
| tree | 98fbf5a5032ba0d567696cb8c152be342329bfc0 | |
| parent | cccc6bba3f771ef29b33e4f79e70ebc3dba245b0 (diff) | |
switch inotify_user to anon_inode
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| -rw-r--r-- | fs/notify/inotify/inotify_user.c | 59 | ||||
| -rw-r--r-- | include/linux/magic.h | 1 |
2 files changed, 6 insertions, 54 deletions
diff --git a/fs/notify/inotify/inotify_user.c b/fs/notify/inotify/inotify_user.c index a94e8bd8eb1f..472cdf29ef82 100644 --- a/fs/notify/inotify/inotify_user.c +++ b/fs/notify/inotify/inotify_user.c | |||
| @@ -29,14 +29,12 @@ | |||
| 29 | #include <linux/init.h> /* module_init */ | 29 | #include <linux/init.h> /* module_init */ |
| 30 | #include <linux/inotify.h> | 30 | #include <linux/inotify.h> |
| 31 | #include <linux/kernel.h> /* roundup() */ | 31 | #include <linux/kernel.h> /* roundup() */ |
| 32 | #include <linux/magic.h> /* superblock magic number */ | ||
| 33 | #include <linux/mount.h> /* mntget */ | ||
| 34 | #include <linux/namei.h> /* LOOKUP_FOLLOW */ | 32 | #include <linux/namei.h> /* LOOKUP_FOLLOW */ |
| 35 | #include <linux/path.h> /* struct path */ | ||
| 36 | #include <linux/sched.h> /* struct user */ | 33 | #include <linux/sched.h> /* struct user */ |
| 37 | #include <linux/slab.h> /* struct kmem_cache */ | 34 | #include <linux/slab.h> /* struct kmem_cache */ |
| 38 | #include <linux/syscalls.h> | 35 | #include <linux/syscalls.h> |
| 39 | #include <linux/types.h> | 36 | #include <linux/types.h> |
| 37 | #include <linux/anon_inodes.h> | ||
| 40 | #include <linux/uaccess.h> | 38 | #include <linux/uaccess.h> |
| 41 | #include <linux/poll.h> | 39 | #include <linux/poll.h> |
| 42 | #include <linux/wait.h> | 40 | #include <linux/wait.h> |
| @@ -45,8 +43,6 @@ | |||
| 45 | 43 | ||
| 46 | #include <asm/ioctls.h> | 44 | #include <asm/ioctls.h> |
| 47 | 45 | ||
| 48 | static struct vfsmount *inotify_mnt __read_mostly; | ||
| 49 | |||
| 50 | /* these are configurable via /proc/sys/fs/inotify/ */ | 46 | /* these are configurable via /proc/sys/fs/inotify/ */ |
| 51 | static int inotify_max_user_instances __read_mostly; | 47 | static int inotify_max_user_instances __read_mostly; |
| 52 | static int inotify_max_queued_events __read_mostly; | 48 | static int inotify_max_queued_events __read_mostly; |
| @@ -645,9 +641,7 @@ SYSCALL_DEFINE1(inotify_init1, int, flags) | |||
| 645 | { | 641 | { |
| 646 | struct fsnotify_group *group; | 642 | struct fsnotify_group *group; |
| 647 | struct user_struct *user; | 643 | struct user_struct *user; |
| 648 | struct file *filp; | 644 | int ret; |
| 649 | struct path path; | ||
| 650 | int fd, ret; | ||
| 651 | 645 | ||
| 652 | /* Check the IN_* constants for consistency. */ | 646 | /* Check the IN_* constants for consistency. */ |
| 653 | BUILD_BUG_ON(IN_CLOEXEC != O_CLOEXEC); | 647 | BUILD_BUG_ON(IN_CLOEXEC != O_CLOEXEC); |
| @@ -656,10 +650,6 @@ SYSCALL_DEFINE1(inotify_init1, int, flags) | |||
| 656 | if (flags & ~(IN_CLOEXEC | IN_NONBLOCK)) | 650 | if (flags & ~(IN_CLOEXEC | IN_NONBLOCK)) |
| 657 | return -EINVAL; | 651 | return -EINVAL; |
| 658 | 652 | ||
| 659 | fd = get_unused_fd_flags(flags & O_CLOEXEC); | ||
| 660 | if (fd < 0) | ||
| 661 | return fd; | ||
| 662 | |||
| 663 | user = get_current_user(); | 653 | user = get_current_user(); |
| 664 | if (unlikely(atomic_read(&user->inotify_devs) >= | 654 | if (unlikely(atomic_read(&user->inotify_devs) >= |
| 665 | inotify_max_user_instances)) { | 655 | inotify_max_user_instances)) { |
| @@ -676,27 +666,14 @@ SYSCALL_DEFINE1(inotify_init1, int, flags) | |||
| 676 | 666 | ||
| 677 | atomic_inc(&user->inotify_devs); | 667 | atomic_inc(&user->inotify_devs); |
| 678 | 668 | ||
| 679 | path.mnt = inotify_mnt; | 669 | ret = anon_inode_getfd("inotify", &inotify_fops, group, |
| 680 | path.dentry = inotify_mnt->mnt_root; | 670 | O_RDONLY | flags); |
| 681 | path_get(&path); | 671 | if (ret >= 0) |
| 682 | filp = alloc_file(&path, FMODE_READ, &inotify_fops); | 672 | return ret; |
| 683 | if (!filp) | ||
| 684 | goto Enfile; | ||
| 685 | 673 | ||
| 686 | filp->f_flags = O_RDONLY | (flags & O_NONBLOCK); | ||
| 687 | filp->private_data = group; | ||
| 688 | |||
| 689 | fd_install(fd, filp); | ||
| 690 | |||
| 691 | return fd; | ||
| 692 | |||
| 693 | Enfile: | ||
| 694 | ret = -ENFILE; | ||
| 695 | path_put(&path); | ||
| 696 | atomic_dec(&user->inotify_devs); | 674 | atomic_dec(&user->inotify_devs); |
| 697 | out_free_uid: | 675 | out_free_uid: |
| 698 | free_uid(user); | 676 | free_uid(user); |
| 699 | put_unused_fd(fd); | ||
| 700 | return ret; | 677 | return ret; |
| 701 | } | 678 | } |
| 702 | 679 | ||
| @@ -783,20 +760,6 @@ out: | |||
| 783 | return ret; | 760 | return ret; |
| 784 | } | 761 | } |
| 785 | 762 | ||
| 786 | static int | ||
| 787 | inotify_get_sb(struct file_system_type *fs_type, int flags, | ||
| 788 | const char *dev_name, void *data, struct vfsmount *mnt) | ||
| 789 | { | ||
| 790 | return get_sb_pseudo(fs_type, "inotify", NULL, | ||
| 791 | INOTIFYFS_SUPER_MAGIC, mnt); | ||
| 792 | } | ||
| 793 | |||
| 794 | static struct file_system_type inotify_fs_type = { | ||
| 795 | .name = "inotifyfs", | ||
| 796 | .get_sb = inotify_get_sb, | ||
| 797 | .kill_sb = kill_anon_super, | ||
| 798 | }; | ||
| 799 | |||
| 800 | /* | 763 | /* |
| 801 | * inotify_user_setup - Our initialization function. Note that we cannnot return | 764 | * inotify_user_setup - Our initialization function. Note that we cannnot return |
| 802 | * error because we have compiled-in VFS hooks. So an (unlikely) failure here | 765 | * error because we have compiled-in VFS hooks. So an (unlikely) failure here |
| @@ -804,16 +767,6 @@ static struct file_system_type inotify_fs_type = { | |||
| 804 | */ | 767 | */ |
| 805 | static int __init inotify_user_setup(void) | 768 | static int __init inotify_user_setup(void) |
| 806 | { | 769 | { |
| 807 | int ret; | ||
| 808 | |||
| 809 | ret = register_filesystem(&inotify_fs_type); | ||
| 810 | if (unlikely(ret)) | ||
| 811 | panic("inotify: register_filesystem returned %d!\n", ret); | ||
| 812 | |||
| 813 | inotify_mnt = kern_mount(&inotify_fs_type); | ||
| 814 | if (IS_ERR(inotify_mnt)) | ||
| 815 | panic("inotify: kern_mount ret %ld!\n", PTR_ERR(inotify_mnt)); | ||
| 816 | |||
| 817 | inotify_inode_mark_cachep = KMEM_CACHE(inotify_inode_mark_entry, SLAB_PANIC); | 770 | inotify_inode_mark_cachep = KMEM_CACHE(inotify_inode_mark_entry, SLAB_PANIC); |
| 818 | event_priv_cachep = KMEM_CACHE(inotify_event_private_data, SLAB_PANIC); | 771 | event_priv_cachep = KMEM_CACHE(inotify_event_private_data, SLAB_PANIC); |
| 819 | 772 | ||
diff --git a/include/linux/magic.h b/include/linux/magic.h index 76285e01b39e..eb9800f05782 100644 --- a/include/linux/magic.h +++ b/include/linux/magic.h | |||
| @@ -52,7 +52,6 @@ | |||
| 52 | #define CGROUP_SUPER_MAGIC 0x27e0eb | 52 | #define CGROUP_SUPER_MAGIC 0x27e0eb |
| 53 | 53 | ||
| 54 | #define FUTEXFS_SUPER_MAGIC 0xBAD1DEA | 54 | #define FUTEXFS_SUPER_MAGIC 0xBAD1DEA |
| 55 | #define INOTIFYFS_SUPER_MAGIC 0x2BAD1DEA | ||
| 56 | 55 | ||
| 57 | #define STACK_END_MAGIC 0x57AC6E9D | 56 | #define STACK_END_MAGIC 0x57AC6E9D |
| 58 | 57 | ||
