The FIISFROZEN ioctl can be use by HA and monitoring software to check the freeze state of a mounted filesystem. Cc: Christoph Hellwig <hch@xxxxxxxxxxxxx> Cc: Dave Chinner <dchinner@xxxxxxxxxx> Signed-off-by: Fernando Luis Vazquez Cao <fernando@xxxxxxxxxxxxx> --- diff -urNp linux-3.5-rc5-orig/fs/compat_ioctl.c linux-3.5-rc5/fs/compat_ioctl.c --- linux-3.5-rc5-orig/fs/compat_ioctl.c 2012-05-21 07:29:13.000000000 +0900 +++ linux-3.5-rc5/fs/compat_ioctl.c 2012-07-06 15:26:52.333999406 +0900 @@ -885,6 +885,7 @@ COMPATIBLE_IOCTL(FIGETBSZ) /* 'X' - originally XFS but some now in the VFS */ COMPATIBLE_IOCTL(FIFREEZE) COMPATIBLE_IOCTL(FITHAW) +COMPATIBLE_IOCTL(FIISFROZEN) COMPATIBLE_IOCTL(KDGETKEYCODE) COMPATIBLE_IOCTL(KDSETKEYCODE) COMPATIBLE_IOCTL(KDGKBTYPE) diff -urNp linux-3.5-rc5-orig/fs/ioctl.c linux-3.5-rc5/fs/ioctl.c --- linux-3.5-rc5-orig/fs/ioctl.c 2012-05-21 07:29:13.000000000 +0900 +++ linux-3.5-rc5/fs/ioctl.c 2012-07-06 15:26:52.333999406 +0900 @@ -536,6 +536,16 @@ static int ioctl_fsthaw(struct file *fil return thaw_super(sb); } +static int ioctl_fs_isfrozen(struct file *filp) +{ + struct super_block *sb = filp->f_path.dentry->d_inode->i_sb; + + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + + return isfrozen_super(sb); +} + /* * When you add any new common ioctls to the switches above and below * please update compat_sys_ioctl() too. @@ -585,6 +595,12 @@ int do_vfs_ioctl(struct file *filp, unsi error = ioctl_fsthaw(filp); break; + case FIISFROZEN: + error = ioctl_fs_isfrozen(filp); + if (error >= 0) + return put_user(error, (int __user *)arg); + break; + case FS_IOC_FIEMAP: return ioctl_fiemap(filp, arg); diff -urNp linux-3.5-rc5-orig/fs/super.c linux-3.5-rc5/fs/super.c --- linux-3.5-rc5-orig/fs/super.c 2012-07-06 15:24:38.149984676 +0900 +++ linux-3.5-rc5/fs/super.c 2012-07-06 15:26:52.333999406 +0900 @@ -1348,3 +1348,8 @@ void emergency_thaw_all(void) schedule_work(work); } } + +int isfrozen_super(struct super_block *sb) +{ + return sb->s_frozen > SB_UNFROZEN ? 1 : 0; +} diff -urNp linux-3.5-rc5-orig/include/linux/fs.h linux-3.5-rc5/include/linux/fs.h --- linux-3.5-rc5-orig/include/linux/fs.h 2012-07-06 15:24:38.157985208 +0900 +++ linux-3.5-rc5/include/linux/fs.h 2012-07-06 15:26:52.333999406 +0900 @@ -340,6 +340,7 @@ struct inodes_stat_t { #define FIFREEZE _IOWR('X', 119, int) /* Freeze */ #define FITHAW _IOWR('X', 120, int) /* Thaw */ #define FITRIM _IOWR('X', 121, struct fstrim_range) /* Trim */ +#define FIISFROZEN _IOR('X', 122, int) /* get sb freeze state */ #define FS_IOC_GETFLAGS _IOR('f', 1, long) #define FS_IOC_SETFLAGS _IOW('f', 2, long) @@ -1944,6 +1945,7 @@ extern int fd_statfs(int, struct kstatfs extern int vfs_ustat(dev_t, struct kstatfs *); extern int freeze_super(struct super_block *super); extern int thaw_super(struct super_block *super); +extern int isfrozen_super(struct super_block *sb); extern bool our_mnt(struct vfsmount *mnt); extern int current_umask(void); -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html