|
@@ -44,6 +44,7 @@
|
|
#include <linux/random.h>
|
|
#include <linux/random.h>
|
|
#include <linux/reboot.h>
|
|
#include <linux/reboot.h>
|
|
#include <linux/file.h>
|
|
#include <linux/file.h>
|
|
|
|
+#include <linux/compat.h>
|
|
#include <linux/delay.h>
|
|
#include <linux/delay.h>
|
|
#include <linux/raid/md_p.h>
|
|
#include <linux/raid/md_p.h>
|
|
#include <linux/raid/md_u.h>
|
|
#include <linux/raid/md_u.h>
|
|
@@ -5691,6 +5692,25 @@ done:
|
|
abort:
|
|
abort:
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|
|
|
|
+#ifdef CONFIG_COMPAT
|
|
|
|
+static int md_compat_ioctl(struct block_device *bdev, fmode_t mode,
|
|
|
|
+ unsigned int cmd, unsigned long arg)
|
|
|
|
+{
|
|
|
|
+ switch (cmd) {
|
|
|
|
+ case HOT_REMOVE_DISK:
|
|
|
|
+ case HOT_ADD_DISK:
|
|
|
|
+ case SET_DISK_FAULTY:
|
|
|
|
+ case SET_BITMAP_FILE:
|
|
|
|
+ /* These take in integer arg, do not convert */
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ arg = (unsigned long)compat_ptr(arg);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return md_ioctl(bdev, mode, cmd, arg);
|
|
|
|
+}
|
|
|
|
+#endif /* CONFIG_COMPAT */
|
|
|
|
|
|
static int md_open(struct block_device *bdev, fmode_t mode)
|
|
static int md_open(struct block_device *bdev, fmode_t mode)
|
|
{
|
|
{
|
|
@@ -5756,6 +5776,9 @@ static const struct block_device_operations md_fops =
|
|
.open = md_open,
|
|
.open = md_open,
|
|
.release = md_release,
|
|
.release = md_release,
|
|
.ioctl = md_ioctl,
|
|
.ioctl = md_ioctl,
|
|
|
|
+#ifdef CONFIG_COMPAT
|
|
|
|
+ .compat_ioctl = md_compat_ioctl,
|
|
|
|
+#endif
|
|
.getgeo = md_getgeo,
|
|
.getgeo = md_getgeo,
|
|
.media_changed = md_media_changed,
|
|
.media_changed = md_media_changed,
|
|
.revalidate_disk= md_revalidate,
|
|
.revalidate_disk= md_revalidate,
|