vfs: Enable FS_IOC_FIEMAP and FIGETBSZ for all filetypes
authorAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Wed, 13 May 2009 22:12:05 +0000 (18:12 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Wed, 13 May 2009 22:12:05 +0000 (18:12 -0400)
The fiemap and get_blk_size ioctls should be enabled even for
directories.  So move it outisde file_ioctl.

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ioctl.c

index 82d9c42b8bac951f54fe0a09298eb90a0627f667..286f38dfc6c0748d90d471c0878e4d08e8f7ece5 100644 (file)
@@ -414,10 +414,6 @@ static int file_ioctl(struct file *filp, unsigned int cmd,
        switch (cmd) {
        case FIBMAP:
                return ioctl_fibmap(filp, p);
-       case FS_IOC_FIEMAP:
-               return ioctl_fiemap(filp, arg);
-       case FIGETBSZ:
-               return put_user(inode->i_sb->s_blocksize, p);
        case FIONREAD:
                return put_user(i_size_read(inode) - filp->f_pos, p);
        }
@@ -557,6 +553,16 @@ int do_vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd,
                error = ioctl_fsthaw(filp);
                break;
 
+       case FS_IOC_FIEMAP:
+               return ioctl_fiemap(filp, arg);
+
+       case FIGETBSZ:
+       {
+               struct inode *inode = filp->f_path.dentry->d_inode;
+               int __user *p = (int __user *)arg;
+               return put_user(inode->i_sb->s_blocksize, p);
+       }
+
        default:
                if (S_ISREG(filp->f_path.dentry->d_inode->i_mode))
                        error = file_ioctl(filp, cmd, arg);