diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-06-07 21:36:59 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-06-07 21:36:59 -0400 |
commit | 8397345172aa5cdcbc133977af9d525f45b874ea (patch) | |
tree | 9b1077a62bbe06d20f1e49d1aa842db0435be085 /fs | |
parent | 59c5f46fbe01a00eedf54a23789634438bb80603 (diff) | |
parent | e6bc45d65df8599fdbae73be9cec4ceed274db53 (diff) |
Merge branch 'for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
* 'for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6:
vfs: make unlink() and rmdir() return ENOENT in preference to EROFS
lmLogOpen() broken failure exit
usb: remove bad dput after dentry_unhash
more conservative S_NOSEC handling
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/super.c | 2 | ||||
-rw-r--r-- | fs/fuse/inode.c | 2 | ||||
-rw-r--r-- | fs/jfs/jfs_logmgr.c | 2 | ||||
-rw-r--r-- | fs/namei.c | 11 | ||||
-rw-r--r-- | fs/ocfs2/super.c | 2 | ||||
-rw-r--r-- | fs/super.c | 2 |
6 files changed, 13 insertions, 8 deletions
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index 117e74e3604..0bb4ebbb71b 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c | |||
@@ -825,7 +825,7 @@ static struct dentry *btrfs_mount(struct file_system_type *fs_type, int flags, | |||
825 | } else { | 825 | } else { |
826 | char b[BDEVNAME_SIZE]; | 826 | char b[BDEVNAME_SIZE]; |
827 | 827 | ||
828 | s->s_flags = flags; | 828 | s->s_flags = flags | MS_NOSEC; |
829 | strlcpy(s->s_id, bdevname(bdev, b), sizeof(s->s_id)); | 829 | strlcpy(s->s_id, bdevname(bdev, b), sizeof(s->s_id)); |
830 | error = btrfs_fill_super(s, fs_devices, data, | 830 | error = btrfs_fill_super(s, fs_devices, data, |
831 | flags & MS_SILENT ? 1 : 0); | 831 | flags & MS_SILENT ? 1 : 0); |
diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index cc6ec4b2f0f..38f84cd48b6 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c | |||
@@ -921,6 +921,8 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent) | |||
921 | if (sb->s_flags & MS_MANDLOCK) | 921 | if (sb->s_flags & MS_MANDLOCK) |
922 | goto err; | 922 | goto err; |
923 | 923 | ||
924 | sb->s_flags &= ~MS_NOSEC; | ||
925 | |||
924 | if (!parse_fuse_opt((char *) data, &d, is_bdev)) | 926 | if (!parse_fuse_opt((char *) data, &d, is_bdev)) |
925 | goto err; | 927 | goto err; |
926 | 928 | ||
diff --git a/fs/jfs/jfs_logmgr.c b/fs/jfs/jfs_logmgr.c index 278e3fb40b7..583636f745e 100644 --- a/fs/jfs/jfs_logmgr.c +++ b/fs/jfs/jfs_logmgr.c | |||
@@ -1123,7 +1123,7 @@ int lmLogOpen(struct super_block *sb) | |||
1123 | bdev = blkdev_get_by_dev(sbi->logdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL, | 1123 | bdev = blkdev_get_by_dev(sbi->logdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL, |
1124 | log); | 1124 | log); |
1125 | if (IS_ERR(bdev)) { | 1125 | if (IS_ERR(bdev)) { |
1126 | rc = -PTR_ERR(bdev); | 1126 | rc = PTR_ERR(bdev); |
1127 | goto free; | 1127 | goto free; |
1128 | } | 1128 | } |
1129 | 1129 | ||
diff --git a/fs/namei.c b/fs/namei.c index e2e4e8d032e..9802345df5e 100644 --- a/fs/namei.c +++ b/fs/namei.c | |||
@@ -2624,6 +2624,10 @@ static long do_rmdir(int dfd, const char __user *pathname) | |||
2624 | error = PTR_ERR(dentry); | 2624 | error = PTR_ERR(dentry); |
2625 | if (IS_ERR(dentry)) | 2625 | if (IS_ERR(dentry)) |
2626 | goto exit2; | 2626 | goto exit2; |
2627 | if (!dentry->d_inode) { | ||
2628 | error = -ENOENT; | ||
2629 | goto exit3; | ||
2630 | } | ||
2627 | error = mnt_want_write(nd.path.mnt); | 2631 | error = mnt_want_write(nd.path.mnt); |
2628 | if (error) | 2632 | if (error) |
2629 | goto exit3; | 2633 | goto exit3; |
@@ -2709,11 +2713,10 @@ static long do_unlinkat(int dfd, const char __user *pathname) | |||
2709 | error = PTR_ERR(dentry); | 2713 | error = PTR_ERR(dentry); |
2710 | if (!IS_ERR(dentry)) { | 2714 | if (!IS_ERR(dentry)) { |
2711 | /* Why not before? Because we want correct error value */ | 2715 | /* Why not before? Because we want correct error value */ |
2712 | if (nd.last.name[nd.last.len]) | ||
2713 | goto slashes; | ||
2714 | inode = dentry->d_inode; | 2716 | inode = dentry->d_inode; |
2715 | if (inode) | 2717 | if (nd.last.name[nd.last.len] || !inode) |
2716 | ihold(inode); | 2718 | goto slashes; |
2719 | ihold(inode); | ||
2717 | error = mnt_want_write(nd.path.mnt); | 2720 | error = mnt_want_write(nd.path.mnt); |
2718 | if (error) | 2721 | if (error) |
2719 | goto exit2; | 2722 | goto exit2; |
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c index cdbaf5e9730..56f61027236 100644 --- a/fs/ocfs2/super.c +++ b/fs/ocfs2/super.c | |||
@@ -1072,7 +1072,7 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent) | |||
1072 | 1072 | ||
1073 | sb->s_magic = OCFS2_SUPER_MAGIC; | 1073 | sb->s_magic = OCFS2_SUPER_MAGIC; |
1074 | 1074 | ||
1075 | sb->s_flags = (sb->s_flags & ~MS_POSIXACL) | | 1075 | sb->s_flags = (sb->s_flags & ~(MS_POSIXACL | MS_NOSEC)) | |
1076 | ((osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0); | 1076 | ((osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0); |
1077 | 1077 | ||
1078 | /* Hard readonly mode only if: bdev_read_only, MS_RDONLY, | 1078 | /* Hard readonly mode only if: bdev_read_only, MS_RDONLY, |
diff --git a/fs/super.c b/fs/super.c index c75593953c5..ab3d672db0d 100644 --- a/fs/super.c +++ b/fs/super.c | |||
@@ -822,7 +822,7 @@ struct dentry *mount_bdev(struct file_system_type *fs_type, | |||
822 | } else { | 822 | } else { |
823 | char b[BDEVNAME_SIZE]; | 823 | char b[BDEVNAME_SIZE]; |
824 | 824 | ||
825 | s->s_flags = flags; | 825 | s->s_flags = flags | MS_NOSEC; |
826 | s->s_mode = mode; | 826 | s->s_mode = mode; |
827 | strlcpy(s->s_id, bdevname(bdev, b), sizeof(s->s_id)); | 827 | strlcpy(s->s_id, bdevname(bdev, b), sizeof(s->s_id)); |
828 | sb_set_blocksize(s, block_size(bdev)); | 828 | sb_set_blocksize(s, block_size(bdev)); |