gfs2: add compat_ioctl support
Out of the four ioctl commands supported on gfs2, only FITRIM
works in compat mode.
Add a proper handler based on the ext4 implementation.
Fixes: 6ddc5c3ddf
("gfs2: getlabel support")
Reviewed-by: Bob Peterson <rpeterso@redhat.com>
Cc: Andreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
parent
0581f1864a
commit
8d09807048
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
|
#include <linux/compat.h>
|
||||||
#include <linux/completion.h>
|
#include <linux/completion.h>
|
||||||
#include <linux/buffer_head.h>
|
#include <linux/buffer_head.h>
|
||||||
#include <linux/pagemap.h>
|
#include <linux/pagemap.h>
|
||||||
@ -354,6 +355,31 @@ static long gfs2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
|||||||
return -ENOTTY;
|
return -ENOTTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_COMPAT
|
||||||
|
static long gfs2_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
||||||
|
{
|
||||||
|
switch(cmd) {
|
||||||
|
/* These are just misnamed, they actually get/put from/to user an int */
|
||||||
|
case FS_IOC32_GETFLAGS:
|
||||||
|
cmd = FS_IOC_GETFLAGS;
|
||||||
|
break;
|
||||||
|
case FS_IOC32_SETFLAGS:
|
||||||
|
cmd = FS_IOC_SETFLAGS;
|
||||||
|
break;
|
||||||
|
/* Keep this list in sync with gfs2_ioctl */
|
||||||
|
case FITRIM:
|
||||||
|
case FS_IOC_GETFSLABEL:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return -ENOIOCTLCMD;
|
||||||
|
}
|
||||||
|
|
||||||
|
return gfs2_ioctl(filp, cmd, (unsigned long)compat_ptr(arg));
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define gfs2_compat_ioctl NULL
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gfs2_size_hint - Give a hint to the size of a write request
|
* gfs2_size_hint - Give a hint to the size of a write request
|
||||||
* @filep: The struct file
|
* @filep: The struct file
|
||||||
@ -1293,6 +1319,7 @@ const struct file_operations gfs2_file_fops = {
|
|||||||
.write_iter = gfs2_file_write_iter,
|
.write_iter = gfs2_file_write_iter,
|
||||||
.iopoll = iomap_dio_iopoll,
|
.iopoll = iomap_dio_iopoll,
|
||||||
.unlocked_ioctl = gfs2_ioctl,
|
.unlocked_ioctl = gfs2_ioctl,
|
||||||
|
.compat_ioctl = gfs2_compat_ioctl,
|
||||||
.mmap = gfs2_mmap,
|
.mmap = gfs2_mmap,
|
||||||
.open = gfs2_open,
|
.open = gfs2_open,
|
||||||
.release = gfs2_release,
|
.release = gfs2_release,
|
||||||
@ -1308,6 +1335,7 @@ const struct file_operations gfs2_file_fops = {
|
|||||||
const struct file_operations gfs2_dir_fops = {
|
const struct file_operations gfs2_dir_fops = {
|
||||||
.iterate_shared = gfs2_readdir,
|
.iterate_shared = gfs2_readdir,
|
||||||
.unlocked_ioctl = gfs2_ioctl,
|
.unlocked_ioctl = gfs2_ioctl,
|
||||||
|
.compat_ioctl = gfs2_compat_ioctl,
|
||||||
.open = gfs2_open,
|
.open = gfs2_open,
|
||||||
.release = gfs2_release,
|
.release = gfs2_release,
|
||||||
.fsync = gfs2_fsync,
|
.fsync = gfs2_fsync,
|
||||||
@ -1324,6 +1352,7 @@ const struct file_operations gfs2_file_fops_nolock = {
|
|||||||
.write_iter = gfs2_file_write_iter,
|
.write_iter = gfs2_file_write_iter,
|
||||||
.iopoll = iomap_dio_iopoll,
|
.iopoll = iomap_dio_iopoll,
|
||||||
.unlocked_ioctl = gfs2_ioctl,
|
.unlocked_ioctl = gfs2_ioctl,
|
||||||
|
.compat_ioctl = gfs2_compat_ioctl,
|
||||||
.mmap = gfs2_mmap,
|
.mmap = gfs2_mmap,
|
||||||
.open = gfs2_open,
|
.open = gfs2_open,
|
||||||
.release = gfs2_release,
|
.release = gfs2_release,
|
||||||
@ -1337,6 +1366,7 @@ const struct file_operations gfs2_file_fops_nolock = {
|
|||||||
const struct file_operations gfs2_dir_fops_nolock = {
|
const struct file_operations gfs2_dir_fops_nolock = {
|
||||||
.iterate_shared = gfs2_readdir,
|
.iterate_shared = gfs2_readdir,
|
||||||
.unlocked_ioctl = gfs2_ioctl,
|
.unlocked_ioctl = gfs2_ioctl,
|
||||||
|
.compat_ioctl = gfs2_compat_ioctl,
|
||||||
.open = gfs2_open,
|
.open = gfs2_open,
|
||||||
.release = gfs2_release,
|
.release = gfs2_release,
|
||||||
.fsync = gfs2_fsync,
|
.fsync = gfs2_fsync,
|
||||||
|
Loading…
Reference in New Issue
Block a user