diff options
Diffstat (limited to 'fs/xfs/xfs_ioctl.c')
| -rw-r--r-- | fs/xfs/xfs_ioctl.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c index 8305f2ac6773..c1c3ef88a260 100644 --- a/fs/xfs/xfs_ioctl.c +++ b/fs/xfs/xfs_ioctl.c | |||
| @@ -42,6 +42,7 @@ | |||
| 42 | #include "xfs_inode_item.h" | 42 | #include "xfs_inode_item.h" |
| 43 | #include "xfs_export.h" | 43 | #include "xfs_export.h" |
| 44 | #include "xfs_trace.h" | 44 | #include "xfs_trace.h" |
| 45 | #include "xfs_icache.h" | ||
| 45 | 46 | ||
| 46 | #include <linux/capability.h> | 47 | #include <linux/capability.h> |
| 47 | #include <linux/dcache.h> | 48 | #include <linux/dcache.h> |
| @@ -70,7 +71,7 @@ xfs_find_handle( | |||
| 70 | int hsize; | 71 | int hsize; |
| 71 | xfs_handle_t handle; | 72 | xfs_handle_t handle; |
| 72 | struct inode *inode; | 73 | struct inode *inode; |
| 73 | struct fd f; | 74 | struct fd f = {0}; |
| 74 | struct path path; | 75 | struct path path; |
| 75 | int error; | 76 | int error; |
| 76 | struct xfs_inode *ip; | 77 | struct xfs_inode *ip; |
| @@ -1602,6 +1603,26 @@ xfs_file_ioctl( | |||
| 1602 | error = xfs_errortag_clearall(mp, 1); | 1603 | error = xfs_errortag_clearall(mp, 1); |
| 1603 | return -error; | 1604 | return -error; |
| 1604 | 1605 | ||
| 1606 | case XFS_IOC_FREE_EOFBLOCKS: { | ||
| 1607 | struct xfs_eofblocks eofb; | ||
| 1608 | |||
| 1609 | if (copy_from_user(&eofb, arg, sizeof(eofb))) | ||
| 1610 | return -XFS_ERROR(EFAULT); | ||
| 1611 | |||
| 1612 | if (eofb.eof_version != XFS_EOFBLOCKS_VERSION) | ||
| 1613 | return -XFS_ERROR(EINVAL); | ||
| 1614 | |||
| 1615 | if (eofb.eof_flags & ~XFS_EOF_FLAGS_VALID) | ||
| 1616 | return -XFS_ERROR(EINVAL); | ||
| 1617 | |||
| 1618 | if (memchr_inv(&eofb.pad32, 0, sizeof(eofb.pad32)) || | ||
| 1619 | memchr_inv(eofb.pad64, 0, sizeof(eofb.pad64))) | ||
| 1620 | return -XFS_ERROR(EINVAL); | ||
| 1621 | |||
| 1622 | error = xfs_icache_free_eofblocks(mp, &eofb); | ||
| 1623 | return -error; | ||
| 1624 | } | ||
| 1625 | |||
| 1605 | default: | 1626 | default: |
| 1606 | return -ENOTTY; | 1627 | return -ENOTTY; |
| 1607 | } | 1628 | } |
