diff options
author | Tao Ma <tao.ma@oracle.com> | 2007-12-18 02:47:25 -0500 |
---|---|---|
committer | Mark Fasheh <mark.fasheh@oracle.com> | 2008-01-25 18:04:24 -0500 |
commit | 7909f2bf835376a20d6dbf853eb459a27566eba2 (patch) | |
tree | d256570ad048e27741970517929bc3c6d4c2b656 /fs/ocfs2/ioctl.c | |
parent | d659072f736837e56b6433d58e5315ad1d4d5ccf (diff) |
[PATCH 2/2] ocfs2: Implement group add for online resize
This patch adds the ability for a userspace program to request that a
properly formatted cluster group be added to the main allocation bitmap for
an Ocfs2 file system. The request is made via an ioctl, OCFS2_IOC_GROUP_ADD.
On a high level, this is similar to ext3, but we use a different ioctl as
the structure which has to be passed through is different.
During an online resize, tunefs.ocfs2 will format any new cluster groups
which must be added to complete the resize, and call OCFS2_IOC_GROUP_ADD on
each one. Kernel verifies that the core cluster group information is valid
and then does the work of linking it into the global allocation bitmap.
Signed-off-by: Tao Ma <tao.ma@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
Diffstat (limited to 'fs/ocfs2/ioctl.c')
-rw-r--r-- | fs/ocfs2/ioctl.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/fs/ocfs2/ioctl.c b/fs/ocfs2/ioctl.c index b74b24ecf0e4..7003d5820d79 100644 --- a/fs/ocfs2/ioctl.c +++ b/fs/ocfs2/ioctl.c | |||
@@ -119,6 +119,7 @@ int ocfs2_ioctl(struct inode * inode, struct file * filp, | |||
119 | int new_clusters; | 119 | int new_clusters; |
120 | int status; | 120 | int status; |
121 | struct ocfs2_space_resv sr; | 121 | struct ocfs2_space_resv sr; |
122 | struct ocfs2_new_group_input input; | ||
122 | 123 | ||
123 | switch (cmd) { | 124 | switch (cmd) { |
124 | case OCFS2_IOC_GETFLAGS: | 125 | case OCFS2_IOC_GETFLAGS: |
@@ -147,6 +148,12 @@ int ocfs2_ioctl(struct inode * inode, struct file * filp, | |||
147 | return -EFAULT; | 148 | return -EFAULT; |
148 | 149 | ||
149 | return ocfs2_group_extend(inode, new_clusters); | 150 | return ocfs2_group_extend(inode, new_clusters); |
151 | case OCFS2_IOC_GROUP_ADD: | ||
152 | case OCFS2_IOC_GROUP_ADD64: | ||
153 | if (copy_from_user(&input, (int __user *) arg, sizeof(input))) | ||
154 | return -EFAULT; | ||
155 | |||
156 | return ocfs2_group_add(inode, &input); | ||
150 | default: | 157 | default: |
151 | return -ENOTTY; | 158 | return -ENOTTY; |
152 | } | 159 | } |
@@ -170,6 +177,8 @@ long ocfs2_compat_ioctl(struct file *file, unsigned cmd, unsigned long arg) | |||
170 | case OCFS2_IOC_UNRESVSP: | 177 | case OCFS2_IOC_UNRESVSP: |
171 | case OCFS2_IOC_UNRESVSP64: | 178 | case OCFS2_IOC_UNRESVSP64: |
172 | case OCFS2_IOC_GROUP_EXTEND: | 179 | case OCFS2_IOC_GROUP_EXTEND: |
180 | case OCFS2_IOC_GROUP_ADD: | ||
181 | case OCFS2_IOC_GROUP_ADD64: | ||
173 | break; | 182 | break; |
174 | default: | 183 | default: |
175 | return -ENOIOCTLCMD; | 184 | return -ENOIOCTLCMD; |