diff options
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_ioctl.c')
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_ioctl.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/fs/xfs/linux-2.6/xfs_ioctl.c b/fs/xfs/linux-2.6/xfs_ioctl.c index 05a447e51cc0..6a3326bcd8d0 100644 --- a/fs/xfs/linux-2.6/xfs_ioctl.c +++ b/fs/xfs/linux-2.6/xfs_ioctl.c | |||
| @@ -141,13 +141,19 @@ xfs_find_handle( | |||
| 141 | return -XFS_ERROR(EINVAL); | 141 | return -XFS_ERROR(EINVAL); |
| 142 | } | 142 | } |
| 143 | 143 | ||
| 144 | /* we need the vnode */ | 144 | switch (inode->i_mode & S_IFMT) { |
| 145 | vp = LINVFS_GET_VP(inode); | 145 | case S_IFREG: |
| 146 | if (vp->v_type != VREG && vp->v_type != VDIR && vp->v_type != VLNK) { | 146 | case S_IFDIR: |
| 147 | case S_IFLNK: | ||
| 148 | break; | ||
| 149 | default: | ||
| 147 | iput(inode); | 150 | iput(inode); |
| 148 | return -XFS_ERROR(EBADF); | 151 | return -XFS_ERROR(EBADF); |
| 149 | } | 152 | } |
| 150 | 153 | ||
| 154 | /* we need the vnode */ | ||
| 155 | vp = LINVFS_GET_VP(inode); | ||
| 156 | |||
| 151 | /* now we can grab the fsid */ | 157 | /* now we can grab the fsid */ |
| 152 | memcpy(&handle.ha_fsid, vp->v_vfsp->vfs_altfsid, sizeof(xfs_fsid_t)); | 158 | memcpy(&handle.ha_fsid, vp->v_vfsp->vfs_altfsid, sizeof(xfs_fsid_t)); |
| 153 | hsize = sizeof(xfs_fsid_t); | 159 | hsize = sizeof(xfs_fsid_t); |
| @@ -386,7 +392,7 @@ xfs_readlink_by_handle( | |||
| 386 | return -error; | 392 | return -error; |
| 387 | 393 | ||
| 388 | /* Restrict this handle operation to symlinks only. */ | 394 | /* Restrict this handle operation to symlinks only. */ |
| 389 | if (vp->v_type != VLNK) { | 395 | if (!S_ISLNK(inode->i_mode)) { |
| 390 | VN_RELE(vp); | 396 | VN_RELE(vp); |
| 391 | return -XFS_ERROR(EINVAL); | 397 | return -XFS_ERROR(EINVAL); |
| 392 | } | 398 | } |
| @@ -982,10 +988,10 @@ xfs_ioc_space( | |||
| 982 | if (vp->v_inode.i_flags & (S_IMMUTABLE|S_APPEND)) | 988 | if (vp->v_inode.i_flags & (S_IMMUTABLE|S_APPEND)) |
| 983 | return -XFS_ERROR(EPERM); | 989 | return -XFS_ERROR(EPERM); |
| 984 | 990 | ||
| 985 | if (!(filp->f_flags & FMODE_WRITE)) | 991 | if (!(filp->f_mode & FMODE_WRITE)) |
| 986 | return -XFS_ERROR(EBADF); | 992 | return -XFS_ERROR(EBADF); |
| 987 | 993 | ||
| 988 | if (vp->v_type != VREG) | 994 | if (!VN_ISREG(vp)) |
| 989 | return -XFS_ERROR(EINVAL); | 995 | return -XFS_ERROR(EINVAL); |
| 990 | 996 | ||
| 991 | if (copy_from_user(&bf, arg, sizeof(bf))) | 997 | if (copy_from_user(&bf, arg, sizeof(bf))) |
