Skip to contentSkip to conversation

ext4: Add the EXT4_IOC_SUPER_INFO ioctl

RFC PATCH In review Akira Fujita 1 participant 1 message Oct 24, 2008

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

RFC PATCH 5/9 ext4: Add the EXT4_IOC_SUPER_INFO ioctl

ext4: online defrag -- Add the EXT4_IOC_SUPER_INFO ioctl

From: Akira Fujita <[email protected]>

EXT4_IOC_SUPER_INFO gets super block information on disk.

Super block information is necessary for relevant (-r) and force (-f) defrag. Non-root user can't get this information by opening the block device directly, so implement this ioctl newly.

--- fs/ext4/ext4.h | 1 +

 fs/ext4/ioctl.c |   10 ++++++++++
 2 files changed, 11 insertions(+), 0 deletions(-)
fs/ext4/ext4.h +1 -0
index ccea421..94c4186 100644
@@ -303,6 +303,7 @@ struct ext4_new_group_data {
 #define EXT4_IOC_MIGRATE		_IO('f', 9)
  /* note ioctl 11 reserved for filesystem-independent FIEMAP ioctl */
 #define EXT4_IOC_DEFRAG			_IOW('f', 15, struct ext4_ext_defrag_data)
+#define EXT4_IOC_SUPER_INFO		_IOR('f', 16, struct ext4_super_block)
 
 /*
  * ioctl commands in 32 bit emulation
fs/ext4/ioctl.c +10 -0
index d5e1fe7..f8ce89b 100644
@@ -246,6 +246,16 @@ setversion_out:
 		return err;
 	}
 
+	case EXT4_IOC_SUPER_INFO: {
+		struct ext4_super_block es;
+
+		if (copy_to_user((struct ext4_super_block __user *)arg,
+				EXT4_SB(inode->i_sb)->s_es, sizeof(es)))
+			return -EFAULT;
+		else
+			return 0;
+	}
+
 	case EXT4_IOC_GROUP_ADD: {
 		struct ext4_new_group_data input;
 		struct super_block *sb = inode->i_sb;