diff options
Diffstat (limited to 'fs/ocfs2/ioctl.c')
-rw-r--r-- | fs/ocfs2/ioctl.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/fs/ocfs2/ioctl.c b/fs/ocfs2/ioctl.c index 467b413bec21..31fbb0619510 100644 --- a/fs/ocfs2/ioctl.c +++ b/fs/ocfs2/ioctl.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include "ocfs2_fs.h" | 21 | #include "ocfs2_fs.h" |
22 | #include "ioctl.h" | 22 | #include "ioctl.h" |
23 | #include "resize.h" | 23 | #include "resize.h" |
24 | #include "refcounttree.h" | ||
24 | 25 | ||
25 | #include <linux/ext2_fs.h> | 26 | #include <linux/ext2_fs.h> |
26 | 27 | ||
@@ -115,6 +116,9 @@ long ocfs2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
115 | int status; | 116 | int status; |
116 | struct ocfs2_space_resv sr; | 117 | struct ocfs2_space_resv sr; |
117 | struct ocfs2_new_group_input input; | 118 | struct ocfs2_new_group_input input; |
119 | struct reflink_arguments args; | ||
120 | const char *old_path, *new_path; | ||
121 | bool preserve; | ||
118 | 122 | ||
119 | switch (cmd) { | 123 | switch (cmd) { |
120 | case OCFS2_IOC_GETFLAGS: | 124 | case OCFS2_IOC_GETFLAGS: |
@@ -160,6 +164,15 @@ long ocfs2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
160 | return -EFAULT; | 164 | return -EFAULT; |
161 | 165 | ||
162 | return ocfs2_group_add(inode, &input); | 166 | return ocfs2_group_add(inode, &input); |
167 | case OCFS2_IOC_REFLINK: | ||
168 | if (copy_from_user(&args, (struct reflink_arguments *)arg, | ||
169 | sizeof(args))) | ||
170 | return -EFAULT; | ||
171 | old_path = (const char *)(unsigned long)args.old_path; | ||
172 | new_path = (const char *)(unsigned long)args.new_path; | ||
173 | preserve = (args.preserve != 0); | ||
174 | |||
175 | return ocfs2_reflink_ioctl(inode, old_path, new_path, preserve); | ||
163 | default: | 176 | default: |
164 | return -ENOTTY; | 177 | return -ENOTTY; |
165 | } | 178 | } |
@@ -182,6 +195,7 @@ long ocfs2_compat_ioctl(struct file *file, unsigned cmd, unsigned long arg) | |||
182 | case OCFS2_IOC_GROUP_EXTEND: | 195 | case OCFS2_IOC_GROUP_EXTEND: |
183 | case OCFS2_IOC_GROUP_ADD: | 196 | case OCFS2_IOC_GROUP_ADD: |
184 | case OCFS2_IOC_GROUP_ADD64: | 197 | case OCFS2_IOC_GROUP_ADD64: |
198 | case OCFS2_IOC_REFLINK: | ||
185 | break; | 199 | break; |
186 | default: | 200 | default: |
187 | return -ENOIOCTLCMD; | 201 | return -ENOIOCTLCMD; |