diff options
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_ioctl.c')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_ioctl.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/fs/xfs/linux-2.6/xfs_ioctl.c b/fs/xfs/linux-2.6/xfs_ioctl.c index 35cbd88e1a54..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 | } |
@@ -985,7 +991,7 @@ xfs_ioc_space( | |||
985 | if (!(filp->f_mode & 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))) |