The FIISFROZEN ioctl can be use by HA and monitoring software to check the freeze state of a mounted filesystem. Signed-off-by: Fernando Luis Vazquez Cao <fernando@xxxxxxxxxxxxx> --- diff -urNp linux-3.0-rc7-orig/fs/compat_ioctl.c linux-3.0-rc7/fs/compat_ioctl.c --- linux-3.0-rc7-orig/fs/compat_ioctl.c 2011-05-19 13:06:34.000000000 +0900 +++ linux-3.0-rc7/fs/compat_ioctl.c 2011-07-20 15:33:40.615998033 +0900 @@ -883,6 +883,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.0-rc7-orig/fs/ioctl.c linux-3.0-rc7/fs/ioctl.c --- linux-3.0-rc7-orig/fs/ioctl.c 2011-05-19 13:06:34.000000000 +0900 +++ linux-3.0-rc7/fs/ioctl.c 2011-07-20 12:23:06.124003192 +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.0-rc7-orig/fs/super.c linux-3.0-rc7/fs/super.c --- linux-3.0-rc7-orig/fs/super.c 2011-07-12 09:55:50.804000002 +0900 +++ linux-3.0-rc7/fs/super.c 2011-07-19 17:45:56.816155171 +0900 @@ -1057,3 +1057,8 @@ out: return 0; } EXPORT_SYMBOL(thaw_super); + +int isfrozen_super(struct super_block *sb) +{ + return sb->s_frozen > SB_UNFROZEN ? 1:0; +} diff -urNp linux-3.0-rc7-orig/include/linux/fs.h linux-3.0-rc7/include/linux/fs.h --- linux-3.0-rc7-orig/include/linux/fs.h 2011-07-12 09:55:51.192000002 +0900 +++ linux-3.0-rc7/include/linux/fs.h 2011-07-20 12:27:59.443932676 +0900 @@ -324,6 +325,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) @@ -1882,6 +1884,7 @@ extern int fd_statfs(int, struct kstatfs extern int statfs_by_dentry(struct dentry *, 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 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