aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/ioctl.c
diff options
context:
space:
mode:
authorTao Ma <tao.ma@oracle.com>2007-12-18 02:47:25 -0500
committerMark Fasheh <mark.fasheh@oracle.com>2008-01-25 18:04:24 -0500
commit7909f2bf835376a20d6dbf853eb459a27566eba2 (patch)
treed256570ad048e27741970517929bc3c6d4c2b656 /fs/ocfs2/ioctl.c
parentd659072f736837e56b6433d58e5315ad1d4d5ccf (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.c9
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;