diff -ruNp 404-check-mounts-support.patch-old/drivers/usb/core/inode.c 
404-check-mounts-support.patch-new/drivers/usb/core/inode.c
--- 404-check-mounts-support.patch-old/drivers/usb/core/inode.c 2005-06-20 
11:47:07.000000000 +1000
+++ 404-check-mounts-support.patch-new/drivers/usb/core/inode.c 2005-07-04 
23:14:19.000000000 +1000
@@ -569,6 +569,7 @@ static struct file_system_type usb_fs_ty
        .name =         "usbfs",
        .get_sb =       usb_get_sb,
        .kill_sb =      kill_litter_super,
+       .fs_flags =     FS_RW_S4_RESUME_SAFE,
 };
 
 /* --------------------------------------------------------------------- */
diff -ruNp 404-check-mounts-support.patch-old/fs/block_dev.c 
404-check-mounts-support.patch-new/fs/block_dev.c
--- 404-check-mounts-support.patch-old/fs/block_dev.c   2005-06-20 
11:47:11.000000000 +1000
+++ 404-check-mounts-support.patch-new/fs/block_dev.c   2005-07-04 
23:14:19.000000000 +1000
@@ -310,6 +310,7 @@ static struct file_system_type bd_type =
        .name           = "bdev",
        .get_sb         = bd_get_sb,
        .kill_sb        = kill_anon_super,
+       .fs_flags       = FS_RW_S4_RESUME_SAFE,
 };
 
 static struct vfsmount *bd_mnt;
diff -ruNp 404-check-mounts-support.patch-old/fs/debugfs/inode.c 
404-check-mounts-support.patch-new/fs/debugfs/inode.c
--- 404-check-mounts-support.patch-old/fs/debugfs/inode.c       2005-02-03 
22:33:40.000000000 +1100
+++ 404-check-mounts-support.patch-new/fs/debugfs/inode.c       2005-07-04 
23:14:19.000000000 +1000
@@ -132,6 +132,7 @@ static struct file_system_type debug_fs_
        .name =         "debugfs",
        .get_sb =       debug_get_sb,
        .kill_sb =      kill_litter_super,
+       .fs_flags       = FS_RW_S4_RESUME_SAFE,
 };
 
 static int debugfs_create_by_name(const char *name, mode_t mode,
diff -ruNp 404-check-mounts-support.patch-old/fs/devfs/base.c 
404-check-mounts-support.patch-new/fs/devfs/base.c
--- 404-check-mounts-support.patch-old/fs/devfs/base.c  2005-02-03 
22:33:40.000000000 +1100
+++ 404-check-mounts-support.patch-new/fs/devfs/base.c  2005-07-04 
23:14:19.000000000 +1000
@@ -2560,6 +2560,7 @@ static struct file_system_type devfs_fs_
        .name = DEVFS_NAME,
        .get_sb = devfs_get_sb,
        .kill_sb = kill_anon_super,
+       .fs_flags = FS_RW_S4_RESUME_SAFE,
 };
 
 /*  File operations for devfsd follow  */
diff -ruNp 404-check-mounts-support.patch-old/fs/devpts/inode.c 
404-check-mounts-support.patch-new/fs/devpts/inode.c
--- 404-check-mounts-support.patch-old/fs/devpts/inode.c        2005-02-03 
22:33:40.000000000 +1100
+++ 404-check-mounts-support.patch-new/fs/devpts/inode.c        2005-07-04 
23:14:19.000000000 +1000
@@ -139,6 +139,7 @@ static struct file_system_type devpts_fs
        .name           = "devpts",
        .get_sb         = devpts_get_sb,
        .kill_sb        = kill_anon_super,
+       .fs_flags       = FS_RW_S4_RESUME_SAFE,
 };
 
 /*
diff -ruNp 404-check-mounts-support.patch-old/fs/eventpoll.c 
404-check-mounts-support.patch-new/fs/eventpoll.c
--- 404-check-mounts-support.patch-old/fs/eventpoll.c   2005-06-20 
11:47:12.000000000 +1000
+++ 404-check-mounts-support.patch-new/fs/eventpoll.c   2005-07-04 
23:14:19.000000000 +1000
@@ -348,6 +348,7 @@ static struct file_system_type eventpoll
        .name           = "eventpollfs",
        .get_sb         = eventpollfs_get_sb,
        .kill_sb        = kill_anon_super,
+       .fs_flags       = FS_RW_S4_RESUME_SAFE,
 };
 
 /* Very basic directory entry operations for the eventpoll virtual file system 
*/
diff -ruNp 404-check-mounts-support.patch-old/fs/hugetlbfs/inode.c 
404-check-mounts-support.patch-new/fs/hugetlbfs/inode.c
--- 404-check-mounts-support.patch-old/fs/hugetlbfs/inode.c     2005-06-20 
11:47:12.000000000 +1000
+++ 404-check-mounts-support.patch-new/fs/hugetlbfs/inode.c     2005-07-04 
23:14:19.000000000 +1000
@@ -728,6 +728,7 @@ static struct file_system_type hugetlbfs
        .name           = "hugetlbfs",
        .get_sb         = hugetlbfs_get_sb,
        .kill_sb        = kill_litter_super,
+       .fs_flags       = FS_RW_S4_RESUME_SAFE,
 };
 
 static struct vfsmount *hugetlbfs_vfsmount;
diff -ruNp 404-check-mounts-support.patch-old/fs/nfs/inode.c 
404-check-mounts-support.patch-new/fs/nfs/inode.c
--- 404-check-mounts-support.patch-old/fs/nfs/inode.c   2005-06-20 
11:47:13.000000000 +1000
+++ 404-check-mounts-support.patch-new/fs/nfs/inode.c   2005-07-04 
23:14:19.000000000 +1000
@@ -1490,7 +1490,7 @@ static struct file_system_type nfs_fs_ty
        .name           = "nfs",
        .get_sb         = nfs_get_sb,
        .kill_sb        = nfs_kill_super,
-       .fs_flags       = FS_ODD_RENAME|FS_REVAL_DOT|FS_BINARY_MOUNTDATA,
+       .fs_flags       = 
FS_ODD_RENAME|FS_REVAL_DOT|FS_BINARY_MOUNTDATA|FS_RW_S4_RESUME_SAFE,
 };
 
 #ifdef CONFIG_NFS_V4
diff -ruNp 404-check-mounts-support.patch-old/fs/pipe.c 
404-check-mounts-support.patch-new/fs/pipe.c
--- 404-check-mounts-support.patch-old/fs/pipe.c        2005-06-20 
11:47:13.000000000 +1000
+++ 404-check-mounts-support.patch-new/fs/pipe.c        2005-07-04 
23:14:19.000000000 +1000
@@ -810,6 +810,7 @@ static struct file_system_type pipe_fs_t
        .name           = "pipefs",
        .get_sb         = pipefs_get_sb,
        .kill_sb        = kill_anon_super,
+       .fs_flags       = FS_RW_S4_RESUME_SAFE,
 };
 
 static int __init init_pipe_fs(void)
diff -ruNp 404-check-mounts-support.patch-old/fs/proc/root.c 
404-check-mounts-support.patch-new/fs/proc/root.c
--- 404-check-mounts-support.patch-old/fs/proc/root.c   2004-12-10 
14:26:29.000000000 +1100
+++ 404-check-mounts-support.patch-new/fs/proc/root.c   2005-07-04 
23:14:19.000000000 +1000
@@ -34,6 +34,7 @@ static struct file_system_type proc_fs_t
        .name           = "proc",
        .get_sb         = proc_get_sb,
        .kill_sb        = kill_anon_super,
+       .fs_flags       = FS_RW_S4_RESUME_SAFE,
 };
 
 extern int __init proc_init_inodecache(void);
diff -ruNp 404-check-mounts-support.patch-old/fs/ramfs/inode.c 
404-check-mounts-support.patch-new/fs/ramfs/inode.c
--- 404-check-mounts-support.patch-old/fs/ramfs/inode.c 2005-06-20 
11:47:13.000000000 +1000
+++ 404-check-mounts-support.patch-new/fs/ramfs/inode.c 2005-07-04 
23:14:19.000000000 +1000
@@ -218,11 +218,13 @@ static struct file_system_type ramfs_fs_
        .name           = "ramfs",
        .get_sb         = ramfs_get_sb,
        .kill_sb        = kill_litter_super,
+       .fs_flags       = FS_RW_S4_RESUME_SAFE,
 };
 static struct file_system_type rootfs_fs_type = {
        .name           = "rootfs",
        .get_sb         = rootfs_get_sb,
        .kill_sb        = kill_litter_super,
+       .fs_flags       = FS_RW_S4_RESUME_SAFE,
 };
 
 static int __init init_ramfs_fs(void)
diff -ruNp 404-check-mounts-support.patch-old/fs/super.c 
404-check-mounts-support.patch-new/fs/super.c
--- 404-check-mounts-support.patch-old/fs/super.c       2005-06-20 
11:47:13.000000000 +1000
+++ 404-check-mounts-support.patch-new/fs/super.c       2005-07-04 
23:14:19.000000000 +1000
@@ -584,6 +584,68 @@ void emergency_remount(void)
        pdflush_operation(do_emergency_remount, 0);
 }
 
+static inline int mount_s4_resume_safe(struct super_block *sb)
+{
+       return ((sb->s_flags & MS_RDONLY) ||
+               (sb->s_type->fs_flags & FS_RW_S4_RESUME_SAFE));
+}
+
+/* mounts_are_s4_resume_safe
+ *
+ * This routine is used by software suspend to check that
+ * the user doesn't have any mounts that we might corrupt
+ * by resuming. This is a possibility where initrds/initramfs
+ * are used and the user hasn't properly configured their
+ * system to check for resuming _before_ mounting filesystems
+ */
+
+int mounts_are_S4_resume_safe(void)
+{
+       struct super_block *sb;
+       int result = 1;
+
+       spin_lock(&sb_lock);
+       list_for_each_entry(sb, &super_blocks, s_list) {
+               if (!mount_s4_resume_safe(sb)) {
+                       result = 0;
+                       break;
+               }
+       }
+
+       spin_unlock(&sb_lock);
+       return result;
+}
+
+/* printk_S4_resume_unsafe_mounts
+ *
+ * Display which mounts we consider unsafe. It's all very
+ * well to tell the user some are, but it's more helpful
+ * to tell them which ones. It might simply be that the
+ * FS is safe but hasn't been marked as such yet.
+ */
+
+void get_S4_resume_unsafe_mounts(char * buffer, int buffer_size)
+{
+       struct super_block *sb;
+       int printed_len = 0;
+
+       spin_lock(&sb_lock);
+       list_for_each_entry(sb, &super_blocks, s_list) {
+               if (!mount_s4_resume_safe(sb)) {
+                       printed_len += snprintf(
+                               buffer + printed_len,
+                               buffer_size - printed_len,
+                               " - %s fs mounted %s.\n",
+                               sb->s_type->name,
+                               sb->s_flags & MS_RDONLY ? " ro" : " rw");
+                       if (printed_len > buffer_size)
+                               break;
+               }
+       }
+
+       spin_unlock(&sb_lock);
+}
+
 /*
  * Unnamed block devices are dummy devices used by virtual
  * filesystems which don't use real block-devices.  -- jrs
diff -ruNp 404-check-mounts-support.patch-old/fs/sysfs/mount.c 
404-check-mounts-support.patch-new/fs/sysfs/mount.c
--- 404-check-mounts-support.patch-old/fs/sysfs/mount.c 2005-06-20 
11:47:13.000000000 +1000
+++ 404-check-mounts-support.patch-new/fs/sysfs/mount.c 2005-07-04 
23:14:19.000000000 +1000
@@ -74,6 +74,7 @@ static struct file_system_type sysfs_fs_
        .name           = "sysfs",
        .get_sb         = sysfs_get_sb,
        .kill_sb        = kill_litter_super,
+       .fs_flags       = FS_RW_S4_RESUME_SAFE,
 };
 
 int __init sysfs_init(void)
diff -ruNp 404-check-mounts-support.patch-old/include/linux/fs.h 
404-check-mounts-support.patch-new/include/linux/fs.h
--- 404-check-mounts-support.patch-old/include/linux/fs.h       2005-06-20 
11:47:29.000000000 +1000
+++ 404-check-mounts-support.patch-new/include/linux/fs.h       2005-07-04 
23:14:19.000000000 +1000
@@ -81,6 +81,7 @@ extern int dir_notify_enable;
 /* public flags for file_system_type */
 #define FS_REQUIRES_DEV 1 
 #define FS_BINARY_MOUNTDATA 2
+#define FS_RW_S4_RESUME_SAFE 4 /* Can this FS be safely mounted RW when we're 
doing S4 resume? */
 #define FS_REVAL_DOT   16384   /* Check the paths ".", ".." for staleness */
 #define FS_ODD_RENAME  32768   /* Temporary stuff; will go away as soon
                                  * as nfs_rename() will be cleaned up
@@ -1199,6 +1200,9 @@ int __put_super(struct super_block *sb);
 int __put_super_and_need_restart(struct super_block *sb);
 void unnamed_dev_init(void);
 
+extern int mounts_are_S4_resume_safe(void);
+extern void get_S4_resume_unsafe_mounts(char * buffer, int buffer_size);
+
 /* Alas, no aliases. Too much hassle with bringing module.h everywhere */
 #define fops_get(fops) \
        (((fops) && try_module_get((fops)->owner) ? (fops) : NULL))
diff -ruNp 404-check-mounts-support.patch-old/ipc/mqueue.c 
404-check-mounts-support.patch-new/ipc/mqueue.c
--- 404-check-mounts-support.patch-old/ipc/mqueue.c     2005-06-20 
11:47:31.000000000 +1000
+++ 404-check-mounts-support.patch-new/ipc/mqueue.c     2005-07-04 
23:14:19.000000000 +1000
@@ -1149,6 +1149,7 @@ static struct file_system_type mqueue_fs
        .name = "mqueue",
        .get_sb = mqueue_get_sb,
        .kill_sb = kill_litter_super,
+       .fs_flags = FS_RW_S4_RESUME_SAFE,
 };
 
 static int msg_max_limit_min = DFLT_MSGMAX;
diff -ruNp 404-check-mounts-support.patch-old/kernel/futex.c 
404-check-mounts-support.patch-new/kernel/futex.c
--- 404-check-mounts-support.patch-old/kernel/futex.c   2005-06-20 
11:47:31.000000000 +1000
+++ 404-check-mounts-support.patch-new/kernel/futex.c   2005-07-04 
23:14:19.000000000 +1000
@@ -781,6 +781,7 @@ static struct file_system_type futex_fs_
        .name           = "futexfs",
        .get_sb         = futexfs_get_sb,
        .kill_sb        = kill_anon_super,
+       .fs_flags       = FS_RW_S4_RESUME_SAFE,
 };
 
 static int __init init(void)
diff -ruNp 404-check-mounts-support.patch-old/mm/shmem.c 
404-check-mounts-support.patch-new/mm/shmem.c
--- 404-check-mounts-support.patch-old/mm/shmem.c       2005-06-20 
11:47:32.000000000 +1000
+++ 404-check-mounts-support.patch-new/mm/shmem.c       2005-07-04 
23:14:19.000000000 +1000
@@ -2203,6 +2203,7 @@ static struct file_system_type tmpfs_fs_
        .name           = "tmpfs",
        .get_sb         = shmem_get_sb,
        .kill_sb        = kill_litter_super,
+       .fs_flags       = FS_RW_S4_RESUME_SAFE,
 };
 static struct vfsmount *shm_mnt;
 
diff -ruNp 404-check-mounts-support.patch-old/mm/tiny-shmem.c 
404-check-mounts-support.patch-new/mm/tiny-shmem.c
--- 404-check-mounts-support.patch-old/mm/tiny-shmem.c  2004-12-10 
14:26:31.000000000 +1100
+++ 404-check-mounts-support.patch-new/mm/tiny-shmem.c  2005-07-04 
23:14:19.000000000 +1000
@@ -25,6 +25,7 @@ static struct file_system_type tmpfs_fs_
        .name           = "tmpfs",
        .get_sb         = ramfs_get_sb,
        .kill_sb        = kill_litter_super,
+       .fs_flags       = FS_RW_S4_RESUME_SAFE,
 };
 
 static struct vfsmount *shm_mnt;
diff -ruNp 404-check-mounts-support.patch-old/net/socket.c 
404-check-mounts-support.patch-new/net/socket.c
--- 404-check-mounts-support.patch-old/net/socket.c     2005-06-20 
11:47:34.000000000 +1000
+++ 404-check-mounts-support.patch-new/net/socket.c     2005-07-04 
23:14:19.000000000 +1000
@@ -336,6 +336,7 @@ static struct file_system_type sock_fs_t
        .name =         "sockfs",
        .get_sb =       sockfs_get_sb,
        .kill_sb =      kill_anon_super,
+       .fs_flags       = FS_RW_S4_RESUME_SAFE,
 };
 static int sockfs_delete_dentry(struct dentry *dentry)
 {
diff -ruNp 404-check-mounts-support.patch-old/net/sunrpc/rpc_pipe.c 
404-check-mounts-support.patch-new/net/sunrpc/rpc_pipe.c
--- 404-check-mounts-support.patch-old/net/sunrpc/rpc_pipe.c    2005-02-03 
22:33:53.000000000 +1100
+++ 404-check-mounts-support.patch-new/net/sunrpc/rpc_pipe.c    2005-07-04 
23:14:19.000000000 +1000
@@ -796,6 +796,7 @@ static struct file_system_type rpc_pipe_
        .name           = "rpc_pipefs",
        .get_sb         = rpc_get_sb,
        .kill_sb        = kill_litter_super,
+       .fs_flags       = FS_RW_S4_RESUME_SAFE,
 };
 
 static void
diff -ruNp 404-check-mounts-support.patch-old/security/selinux/selinuxfs.c 
404-check-mounts-support.patch-new/security/selinux/selinuxfs.c
--- 404-check-mounts-support.patch-old/security/selinux/selinuxfs.c     
2005-06-20 11:47:35.000000000 +1000
+++ 404-check-mounts-support.patch-new/security/selinux/selinuxfs.c     
2005-07-04 23:14:19.000000000 +1000
@@ -1308,6 +1308,7 @@ static struct file_system_type sel_fs_ty
        .name           = "selinuxfs",
        .get_sb         = sel_get_sb,
        .kill_sb        = kill_litter_super,
+       .fs_flags       = FS_RW_S4_RESUME_SAFE,
 };
 
 struct vfsmount *selinuxfs_mount;

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to