Return -EOPNOTSUPP for ZFS_IOC_{GET|SET}FLAGS
authorBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 26 Jun 2013 19:53:04 +0000 (12:53 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 26 Jun 2013 22:20:13 +0000 (15:20 -0700)
Until these hooks are fully implemented return the expected
-EOPNOTSUPP error to indicate they are not functional.  This
allows test suites such as xfstests to cleanly skip testing
this functionality until it's implemented.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Issue #229

include/linux/vfs_compat.h
module/zfs/zpl_file.c

index c9fa76e..bccf0d0 100644 (file)
@@ -149,4 +149,7 @@ typedef     int             zpl_umode_t;
 #define zpl_sget(type, cmp, set, fl, mtd)      sget(type, cmp, set, mtd)
 #endif /* HAVE_5ARG_SGET */
 
+#define ZFS_IOC_GETFLAGS       FS_IOC_GETFLAGS
+#define ZFS_IOC_SETFLAGS       FS_IOC_SETFLAGS
+
 #endif /* _ZFS_VFS_H */
index db6a72c..c6d97db 100644 (file)
@@ -433,6 +433,27 @@ zpl_fallocate(struct file *filp, int mode, loff_t offset, loff_t len)
 }
 #endif /* HAVE_FILE_FALLOCATE */
 
+static long
+zpl_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
+{
+       switch (cmd) {
+       case ZFS_IOC_GETFLAGS:
+       case ZFS_IOC_SETFLAGS:
+               return (-EOPNOTSUPP);
+       default:
+               return (-ENOTTY);
+       }
+}
+
+#ifdef CONFIG_COMPAT
+static long
+zpl_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
+{
+       return zpl_ioctl(filp, cmd, arg);
+}
+#endif /* CONFIG_COMPAT */
+
+
 const struct address_space_operations zpl_address_space_operations = {
        .readpages      = zpl_readpages,
        .readpage       = zpl_readpage,
@@ -451,6 +472,10 @@ const struct file_operations zpl_file_operations = {
 #ifdef HAVE_FILE_FALLOCATE
        .fallocate      = zpl_fallocate,
 #endif /* HAVE_FILE_FALLOCATE */
+       .unlocked_ioctl = zpl_ioctl,
+#ifdef CONFIG_COMPAT
+       .compat_ioctl   = zpl_compat_ioctl,
+#endif
 };
 
 const struct file_operations zpl_dir_file_operations = {
@@ -458,4 +483,8 @@ const struct file_operations zpl_dir_file_operations = {
        .read           = generic_read_dir,
        .readdir        = zpl_readdir,
        .fsync          = zpl_fsync,
+       .unlocked_ioctl = zpl_ioctl,
+#ifdef CONFIG_COMPAT
+       .compat_ioctl   = zpl_compat_ioctl,
+#endif
 };