PM / Hibernate: Really deprecate deprecated user ioctls
Jiri Slaby [Wed, 27 Jan 2010 22:47:50 +0000 (23:47 +0100)]
They were deprecated and removed from exported headers more than 2
years ago. Inform users about their removal in the future now.

(Switch cases needed to be reorderded for an easy fall through.)

And add an entry to feature-removal-schedule.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Acked-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>

Documentation/feature-removal-schedule.txt
kernel/power/user.c

index 0a46833..b9eba90 100644 (file)
@@ -64,6 +64,17 @@ Who: Robin Getz <rgetz@blackfin.uclinux.org> & Matt Mackall <mpm@selenic.com>
 
 ---------------------------
 
+What:  Deprecated snapshot ioctls
+When:  2.6.36
+
+Why:   The ioctls in kernel/power/user.c were marked as deprecated long time
+       ago. Now they notify users about that so that they need to replace
+       their userspace. After some more time, remove them completely.
+
+Who:   Jiri Slaby <jirislaby@gmail.com>
+
+---------------------------
+
 What:  The ieee80211_regdom module parameter
 When:  March 2010 / desktop catchup
 
index bf0014d..4d22896 100644 (file)
@@ -195,6 +195,15 @@ static ssize_t snapshot_write(struct file *filp, const char __user *buf,
        return res;
 }
 
+static void snapshot_deprecated_ioctl(unsigned int cmd)
+{
+       if (printk_ratelimit())
+               printk(KERN_NOTICE "%pf: ioctl '%.8x' is deprecated and will "
+                               "be removed soon, update your suspend-to-disk "
+                               "utilities\n",
+                               __builtin_return_address(0), cmd);
+}
+
 static long snapshot_ioctl(struct file *filp, unsigned int cmd,
                                                        unsigned long arg)
 {
@@ -246,8 +255,9 @@ static long snapshot_ioctl(struct file *filp, unsigned int cmd,
                data->frozen = 0;
                break;
 
-       case SNAPSHOT_CREATE_IMAGE:
        case SNAPSHOT_ATOMIC_SNAPSHOT:
+               snapshot_deprecated_ioctl(cmd);
+       case SNAPSHOT_CREATE_IMAGE:
                if (data->mode != O_RDONLY || !data->frozen  || data->ready) {
                        error = -EPERM;
                        break;
@@ -275,8 +285,9 @@ static long snapshot_ioctl(struct file *filp, unsigned int cmd,
                data->ready = 0;
                break;
 
-       case SNAPSHOT_PREF_IMAGE_SIZE:
        case SNAPSHOT_SET_IMAGE_SIZE:
+               snapshot_deprecated_ioctl(cmd);
+       case SNAPSHOT_PREF_IMAGE_SIZE:
                image_size = arg;
                break;
 
@@ -290,15 +301,17 @@ static long snapshot_ioctl(struct file *filp, unsigned int cmd,
                error = put_user(size, (loff_t __user *)arg);
                break;
 
-       case SNAPSHOT_AVAIL_SWAP_SIZE:
        case SNAPSHOT_AVAIL_SWAP:
+               snapshot_deprecated_ioctl(cmd);
+       case SNAPSHOT_AVAIL_SWAP_SIZE:
                size = count_swap_pages(data->swap, 1);
                size <<= PAGE_SHIFT;
                error = put_user(size, (loff_t __user *)arg);
                break;
 
-       case SNAPSHOT_ALLOC_SWAP_PAGE:
        case SNAPSHOT_GET_SWAP_PAGE:
+               snapshot_deprecated_ioctl(cmd);
+       case SNAPSHOT_ALLOC_SWAP_PAGE:
                if (data->swap < 0 || data->swap >= MAX_SWAPFILES) {
                        error = -ENODEV;
                        break;
@@ -321,6 +334,7 @@ static long snapshot_ioctl(struct file *filp, unsigned int cmd,
                break;
 
        case SNAPSHOT_SET_SWAP_FILE: /* This ioctl is deprecated */
+               snapshot_deprecated_ioctl(cmd);
                if (!swsusp_swap_in_use()) {
                        /*
                         * User space encodes device types as two-byte values,
@@ -362,6 +376,7 @@ static long snapshot_ioctl(struct file *filp, unsigned int cmd,
                break;
 
        case SNAPSHOT_PMOPS: /* This ioctl is deprecated */
+               snapshot_deprecated_ioctl(cmd);
                error = -EINVAL;
 
                switch (arg) {