From: Jesper Juhl <jesper.juhl@gmail.com>
To: Andrew Morton <akpm@osdl.org>
Cc: Arjan van de Ven <arjan@infradead.org>,
davej@redhat.com, bunk@stusta.de, linux-kernel@vger.kernel.org,
pbadari@us.ibm.com, kenneth.w.chen@intel.com
Subject: Re: [2.6 patch] the scheduled removal of the obsolete raw driver
Date: Sun, 22 Jan 2006 18:50:25 +0100 [thread overview]
Message-ID: <9a8748490601220950o7306c082gaac72be87c333b8a@mail.gmail.com> (raw)
In-Reply-To: <20060121133503.353ad1be.akpm@osdl.org>
[-- Attachment #1: Type: text/plain, Size: 10408 bytes --]
On 1/21/06, Andrew Morton <akpm@osdl.org> wrote:
> Arjan van de Ven <arjan@infradead.org> wrote:
> >
> > another thing we really should do is making such "obsolete to be phased
> > out" things printk (at least once per boot ;) so that people see it in
> > their logs, not just in the kernel source.
>
> Like sys_bdflush() has been doing for 3-4 years. That still comes out on
> a few of my test boxes, but I'm a distro recidivist.
>
How about something like this?
- We extend the deadline by a year - that should give most people enough time.
- We make it *very clear* in text both in source comments, Kconfig,
feature-removal-schedule and elsewhere that this feature *will* die soon.
- We make the build spit lots of 'deprecated' warnings when people build it.
- We make use of RAW devices printk() a warning so even people who don't read
kernel documentation nor build their own kernels will notice.
Then next january we can kill the feature and rightfully claim that ample
warning has been given on all levels.
(patch also attached since gmail will likely break the inline version).
Signed-off-by: Jesper Juhl <jesper.juhl@gmail.com>
---
Documentation/feature-removal-schedule.txt | 6 +++---
Documentation/ioctl-mess.txt | 2 ++
drivers/char/Kconfig | 14 ++++++++++----
drivers/char/raw.c | 28 +++++++++++++++++-----------
fs/compat_ioctl.c | 8 ++++----
include/linux/compat_ioctl.h | 2 +-
include/linux/raw.h | 5 +++++
7 files changed, 42 insertions(+), 23 deletions(-)
--- linux-2.6.16-rc1-mm2-orig/Documentation/feature-removal-schedule.txt 2006-01-20
21:50:43.000000000 +0100
+++ linux-2.6.16-rc1-mm2/Documentation/feature-removal-schedule.txt 2006-01-22
18:19:17.000000000 +0100
@@ -18,9 +18,9 @@ Who: Greg Kroah-Hartman <greg@kroah.com>
---------------------------
What: RAW driver (CONFIG_RAW_DRIVER)
-When: December 2005
-Why: declared obsolete since kernel 2.6.3
- O_DIRECT can be used instead
+When: January 2007
+Why: Declared obsolete since kernel 2.6.3
+ O_DIRECT can be used instead.
Who: Adrian Bunk <bunk@stusta.de>
---------------------------
--- linux-2.6.16-rc1-mm2-orig/drivers/char/Kconfig 2006-01-20
21:50:44.000000000 +0100
+++ linux-2.6.16-rc1-mm2/drivers/char/Kconfig 2006-01-22
18:39:23.000000000 +0100
@@ -945,10 +945,11 @@ config RAW_DRIVER
The raw driver permits block devices to be bound to /dev/raw/rawN.
Once bound, I/O against /dev/raw/rawN uses efficient zero-copy I/O.
See the raw(8) manpage for more details.
-
- The raw driver is deprecated and will be removed soon.
- Applications should simply open the device (eg /dev/hda1)
- with the O_DIRECT flag.
+
+ Feature removal warning:
+ The raw driver is deprecated and will be removed in January 2007.
+ Applications should simply open the device (eg /dev/hda1)
+ with the O_DIRECT flag.
config MAX_RAW_DEVS
int "Maximum number of RAW devices to support (1-8192)"
@@ -958,6 +959,11 @@ config MAX_RAW_DEVS
The maximum number of RAW devices that are supported.
Default is 256. Increase this number in case you need lots of
raw devices.
+
+ Feature removal warning:
+ The raw driver is deprecated and will be removed in January 2007.
+ Applications should simply open the device (eg /dev/hda1)
+ with the O_DIRECT flag.
config HPET
bool "HPET - High Precision Event Timer" if (X86 || IA64)
--- linux-2.6.16-rc1-mm2-orig/include/linux/raw.h 2006-01-03
04:21:10.000000000 +0100
+++ linux-2.6.16-rc1-mm2/include/linux/raw.h 2006-01-22 18:20:30.000000000 +0100
@@ -1,3 +1,8 @@
+/*
+ * The RAW driver is obsolete and will go away in January 2007.
+ * Please use O_DIRECT instead.
+ */
+
#ifndef __LINUX_RAW_H
#define __LINUX_RAW_H
--- linux-2.6.16-rc1-mm2-orig/include/linux/compat_ioctl.h 2006-01-20
21:50:57.000000000 +0100
+++ linux-2.6.16-rc1-mm2/include/linux/compat_ioctl.h 2006-01-22
18:21:56.000000000 +0100
@@ -568,7 +568,7 @@ COMPATIBLE_IOCTL(DEVFSDIOC_GET_PROTO_REV
COMPATIBLE_IOCTL(DEVFSDIOC_SET_EVENT_MASK)
COMPATIBLE_IOCTL(DEVFSDIOC_RELEASE_EVENT_QUEUE)
COMPATIBLE_IOCTL(DEVFSDIOC_SET_DEBUG_MASK)
-/* Raw devices */
+/* Raw devices (obsolete and will go away January 2007 - don't use) */
COMPATIBLE_IOCTL(RAW_SETBIND)
COMPATIBLE_IOCTL(RAW_GETBIND)
/* SMB ioctls which do not need any translations */
--- linux-2.6.16-rc1-mm2-orig/fs/compat_ioctl.c 2006-01-20
21:50:48.000000000 +0100
+++ linux-2.6.16-rc1-mm2/fs/compat_ioctl.c 2006-01-22 18:23:37.000000000 +0100
@@ -2148,7 +2148,7 @@ struct raw32_config_request
__u64 block_minor;
} __attribute__((packed));
-static int get_raw32_request(struct raw_config_request *req, struct
raw32_config_request __user *user_req)
+static int __deprecated get_raw32_request(struct raw_config_request
*req, struct raw32_config_request __user *user_req)
{
int ret;
@@ -2162,7 +2162,7 @@ static int get_raw32_request(struct raw_
return ret ? -EFAULT : 0;
}
-static int set_raw32_request(struct raw_config_request *req, struct
raw32_config_request __user *user_req)
+static int __deprecated set_raw32_request(struct raw_config_request
*req, struct raw32_config_request __user *user_req)
{
int ret;
@@ -2176,7 +2176,7 @@ static int set_raw32_request(struct raw_
return ret ? -EFAULT : 0;
}
-static int raw_ioctl(unsigned fd, unsigned cmd, unsigned long arg)
+static int __deprecated raw_ioctl(unsigned fd, unsigned cmd, unsigned long arg)
{
int ret;
@@ -2913,7 +2913,7 @@ HANDLE_IOCTL(BLKGETSIZE64_32, do_blkgets
HANDLE_IOCTL(VFAT_IOCTL_READDIR_BOTH32, vfat_ioctl32)
HANDLE_IOCTL(VFAT_IOCTL_READDIR_SHORT32, vfat_ioctl32)
HANDLE_IOCTL(REISERFS_IOC_UNPACK32, reiserfs_ioctl32)
-/* Raw devices */
+/* Raw devices (obsolete and will go away January 2007 - don't use) */
HANDLE_IOCTL(RAW_SETBIND, raw_ioctl)
HANDLE_IOCTL(RAW_GETBIND, raw_ioctl)
/* Serial */
--- linux-2.6.16-rc1-mm2-orig/Documentation/ioctl-mess.txt 2006-01-20
21:50:43.000000000 +0100
+++ linux-2.6.16-rc1-mm2/Documentation/ioctl-mess.txt 2006-01-22
18:25:55.000000000 +0100
@@ -3385,6 +3385,8 @@ N: RAID_VERSION
I: -
O: struct mdu_version_s
+# Raw devices are obsolete and will go away in January 2007.
+# Please use O_DIRECT instead.
N: RAW_GETBIND
I: struct raw_config_request
O: struct raw_config_request
--- linux-2.6.16-rc1-mm2-orig/drivers/char/raw.c 2006-01-20
21:50:44.000000000 +0100
+++ linux-2.6.16-rc1-mm2/drivers/char/raw.c 2006-01-22 18:36:07.000000000 +0100
@@ -6,6 +6,9 @@
*
* We reserve minor number 0 for a control interface. ioctl()s on this
* device are used to bind the other minor numbers to block devices.
+ *
+ * Raw devices are obsolete and going away in January 2007 in favour of
+ * O_DIRECT.
*/
#include <linux/init.h>
@@ -43,12 +46,15 @@ static struct file_operations raw_ctl_fo
* Set the device's soft blocksize to the minimum possible. This gives the
* finest possible alignment and has no adverse impact on performance.
*/
-static int raw_open(struct inode *inode, struct file *filp)
+static int __deprecated raw_open(struct inode *inode, struct file *filp)
{
const int minor = iminor(inode);
struct block_device *bdev;
int err;
+ printk(KERN_WARNING "RAW devices are obsolete and *WILL* be removed in"
+ " January 2007. Please use O_DIRECT instead.\n");
+
if (minor == 0) { /* It is the control device */
filp->f_op = &raw_ctl_fops;
return 0;
@@ -95,7 +101,7 @@ out:
* When the final fd which refers to this character-special node is closed, we
* make its ->mapping point back at its own i_data.
*/
-static int raw_release(struct inode *inode, struct file *filp)
+static int __deprecated raw_release(struct inode *inode, struct file *filp)
{
const int minor= iminor(inode);
struct block_device *bdev;
@@ -117,8 +123,8 @@ static int raw_release(struct inode *ino
/*
* Forward ioctls to the underlying block device.
*/
-static int
-raw_ioctl(struct inode *inode, struct file *filp,
+static int
+__deprecated raw_ioctl(struct inode *inode, struct file *filp,
unsigned int command, unsigned long arg)
{
struct block_device *bdev = filp->private_data;
@@ -126,7 +132,7 @@ raw_ioctl(struct inode *inode, struct fi
return blkdev_ioctl(bdev->bd_inode, NULL, command, arg);
}
-static void bind_device(struct raw_config_request *rq)
+static void __deprecated bind_device(struct raw_config_request *rq)
{
class_device_destroy(raw_class, MKDEV(RAW_MAJOR, rq->raw_minor));
class_device_create(raw_class, NULL, MKDEV(RAW_MAJOR, rq->raw_minor),
@@ -137,7 +143,7 @@ static void bind_device(struct raw_confi
* Deal with ioctls against the raw-device control interface, to bind
* and unbind other raw devices.
*/
-static int raw_ctl_ioctl(struct inode *inode, struct file *filp,
+static int __deprecated raw_ctl_ioctl(struct inode *inode, struct file *filp,
unsigned int command, unsigned long arg)
{
struct raw_config_request rq;
@@ -239,8 +245,8 @@ out:
return err;
}
-static ssize_t raw_file_write(struct file *file, const char __user *buf,
- size_t count, loff_t *ppos)
+static ssize_t __deprecated raw_file_write(struct file *file,
+ const char __user *buf, size_t count, loff_t *ppos)
{
struct iovec local_iov = {
.iov_base = (char __user *)buf,
@@ -250,8 +256,8 @@ static ssize_t raw_file_write(struct fil
return generic_file_write_nolock(file, &local_iov, 1, ppos);
}
-static ssize_t raw_file_aio_write(struct kiocb *iocb, const char __user *buf,
- size_t count, loff_t pos)
+static ssize_t __deprecated raw_file_aio_write(struct kiocb *iocb,
+ const char __user *buf, size_t count, loff_t pos)
{
struct iovec local_iov = {
.iov_base = (char __user *)buf,
@@ -324,7 +330,7 @@ error:
return 1;
}
-static void __exit raw_exit(void)
+static void __deprecated __exit raw_exit(void)
{
int i;
--
Jesper Juhl <jesper.juhl@gmail.com>
Don't top-post http://www.catb.org/~esr/jargon/html/T/top-post.html
Plain text mails only, please http://www.expita.com/nomime.html
[-- Attachment #2: deprecate-raw.patch --]
[-- Type: application/octet-stream, Size: 8884 bytes --]
Signed-off-by: Jesper Juhl <jesper.juhl@gmail.com>
---
Documentation/feature-removal-schedule.txt | 6 +++---
Documentation/ioctl-mess.txt | 2 ++
drivers/char/Kconfig | 14 ++++++++++----
drivers/char/raw.c | 28 +++++++++++++++++-----------
fs/compat_ioctl.c | 8 ++++----
include/linux/compat_ioctl.h | 2 +-
include/linux/raw.h | 5 +++++
7 files changed, 42 insertions(+), 23 deletions(-)
--- linux-2.6.16-rc1-mm2-orig/Documentation/feature-removal-schedule.txt 2006-01-20 21:50:43.000000000 +0100
+++ linux-2.6.16-rc1-mm2/Documentation/feature-removal-schedule.txt 2006-01-22 18:19:17.000000000 +0100
@@ -18,9 +18,9 @@ Who: Greg Kroah-Hartman <greg@kroah.com>
---------------------------
What: RAW driver (CONFIG_RAW_DRIVER)
-When: December 2005
-Why: declared obsolete since kernel 2.6.3
- O_DIRECT can be used instead
+When: January 2007
+Why: Declared obsolete since kernel 2.6.3
+ O_DIRECT can be used instead.
Who: Adrian Bunk <bunk@stusta.de>
---------------------------
--- linux-2.6.16-rc1-mm2-orig/drivers/char/Kconfig 2006-01-20 21:50:44.000000000 +0100
+++ linux-2.6.16-rc1-mm2/drivers/char/Kconfig 2006-01-22 18:39:23.000000000 +0100
@@ -945,10 +945,11 @@ config RAW_DRIVER
The raw driver permits block devices to be bound to /dev/raw/rawN.
Once bound, I/O against /dev/raw/rawN uses efficient zero-copy I/O.
See the raw(8) manpage for more details.
-
- The raw driver is deprecated and will be removed soon.
- Applications should simply open the device (eg /dev/hda1)
- with the O_DIRECT flag.
+
+ Feature removal warning:
+ The raw driver is deprecated and will be removed in January 2007.
+ Applications should simply open the device (eg /dev/hda1)
+ with the O_DIRECT flag.
config MAX_RAW_DEVS
int "Maximum number of RAW devices to support (1-8192)"
@@ -958,6 +959,11 @@ config MAX_RAW_DEVS
The maximum number of RAW devices that are supported.
Default is 256. Increase this number in case you need lots of
raw devices.
+
+ Feature removal warning:
+ The raw driver is deprecated and will be removed in January 2007.
+ Applications should simply open the device (eg /dev/hda1)
+ with the O_DIRECT flag.
config HPET
bool "HPET - High Precision Event Timer" if (X86 || IA64)
--- linux-2.6.16-rc1-mm2-orig/include/linux/raw.h 2006-01-03 04:21:10.000000000 +0100
+++ linux-2.6.16-rc1-mm2/include/linux/raw.h 2006-01-22 18:20:30.000000000 +0100
@@ -1,3 +1,8 @@
+/*
+ * The RAW driver is obsolete and will go away in January 2007.
+ * Please use O_DIRECT instead.
+ */
+
#ifndef __LINUX_RAW_H
#define __LINUX_RAW_H
--- linux-2.6.16-rc1-mm2-orig/include/linux/compat_ioctl.h 2006-01-20 21:50:57.000000000 +0100
+++ linux-2.6.16-rc1-mm2/include/linux/compat_ioctl.h 2006-01-22 18:21:56.000000000 +0100
@@ -568,7 +568,7 @@ COMPATIBLE_IOCTL(DEVFSDIOC_GET_PROTO_REV
COMPATIBLE_IOCTL(DEVFSDIOC_SET_EVENT_MASK)
COMPATIBLE_IOCTL(DEVFSDIOC_RELEASE_EVENT_QUEUE)
COMPATIBLE_IOCTL(DEVFSDIOC_SET_DEBUG_MASK)
-/* Raw devices */
+/* Raw devices (obsolete and will go away January 2007 - don't use) */
COMPATIBLE_IOCTL(RAW_SETBIND)
COMPATIBLE_IOCTL(RAW_GETBIND)
/* SMB ioctls which do not need any translations */
--- linux-2.6.16-rc1-mm2-orig/fs/compat_ioctl.c 2006-01-20 21:50:48.000000000 +0100
+++ linux-2.6.16-rc1-mm2/fs/compat_ioctl.c 2006-01-22 18:23:37.000000000 +0100
@@ -2148,7 +2148,7 @@ struct raw32_config_request
__u64 block_minor;
} __attribute__((packed));
-static int get_raw32_request(struct raw_config_request *req, struct raw32_config_request __user *user_req)
+static int __deprecated get_raw32_request(struct raw_config_request *req, struct raw32_config_request __user *user_req)
{
int ret;
@@ -2162,7 +2162,7 @@ static int get_raw32_request(struct raw_
return ret ? -EFAULT : 0;
}
-static int set_raw32_request(struct raw_config_request *req, struct raw32_config_request __user *user_req)
+static int __deprecated set_raw32_request(struct raw_config_request *req, struct raw32_config_request __user *user_req)
{
int ret;
@@ -2176,7 +2176,7 @@ static int set_raw32_request(struct raw_
return ret ? -EFAULT : 0;
}
-static int raw_ioctl(unsigned fd, unsigned cmd, unsigned long arg)
+static int __deprecated raw_ioctl(unsigned fd, unsigned cmd, unsigned long arg)
{
int ret;
@@ -2913,7 +2913,7 @@ HANDLE_IOCTL(BLKGETSIZE64_32, do_blkgets
HANDLE_IOCTL(VFAT_IOCTL_READDIR_BOTH32, vfat_ioctl32)
HANDLE_IOCTL(VFAT_IOCTL_READDIR_SHORT32, vfat_ioctl32)
HANDLE_IOCTL(REISERFS_IOC_UNPACK32, reiserfs_ioctl32)
-/* Raw devices */
+/* Raw devices (obsolete and will go away January 2007 - don't use) */
HANDLE_IOCTL(RAW_SETBIND, raw_ioctl)
HANDLE_IOCTL(RAW_GETBIND, raw_ioctl)
/* Serial */
--- linux-2.6.16-rc1-mm2-orig/Documentation/ioctl-mess.txt 2006-01-20 21:50:43.000000000 +0100
+++ linux-2.6.16-rc1-mm2/Documentation/ioctl-mess.txt 2006-01-22 18:25:55.000000000 +0100
@@ -3385,6 +3385,8 @@ N: RAID_VERSION
I: -
O: struct mdu_version_s
+# Raw devices are obsolete and will go away in January 2007.
+# Please use O_DIRECT instead.
N: RAW_GETBIND
I: struct raw_config_request
O: struct raw_config_request
--- linux-2.6.16-rc1-mm2-orig/drivers/char/raw.c 2006-01-20 21:50:44.000000000 +0100
+++ linux-2.6.16-rc1-mm2/drivers/char/raw.c 2006-01-22 18:36:07.000000000 +0100
@@ -6,6 +6,9 @@
*
* We reserve minor number 0 for a control interface. ioctl()s on this
* device are used to bind the other minor numbers to block devices.
+ *
+ * Raw devices are obsolete and going away in January 2007 in favour of
+ * O_DIRECT.
*/
#include <linux/init.h>
@@ -43,12 +46,15 @@ static struct file_operations raw_ctl_fo
* Set the device's soft blocksize to the minimum possible. This gives the
* finest possible alignment and has no adverse impact on performance.
*/
-static int raw_open(struct inode *inode, struct file *filp)
+static int __deprecated raw_open(struct inode *inode, struct file *filp)
{
const int minor = iminor(inode);
struct block_device *bdev;
int err;
+ printk(KERN_WARNING "RAW devices are obsolete and *WILL* be removed in"
+ " January 2007. Please use O_DIRECT instead.\n");
+
if (minor == 0) { /* It is the control device */
filp->f_op = &raw_ctl_fops;
return 0;
@@ -95,7 +101,7 @@ out:
* When the final fd which refers to this character-special node is closed, we
* make its ->mapping point back at its own i_data.
*/
-static int raw_release(struct inode *inode, struct file *filp)
+static int __deprecated raw_release(struct inode *inode, struct file *filp)
{
const int minor= iminor(inode);
struct block_device *bdev;
@@ -117,8 +123,8 @@ static int raw_release(struct inode *ino
/*
* Forward ioctls to the underlying block device.
*/
-static int
-raw_ioctl(struct inode *inode, struct file *filp,
+static int
+__deprecated raw_ioctl(struct inode *inode, struct file *filp,
unsigned int command, unsigned long arg)
{
struct block_device *bdev = filp->private_data;
@@ -126,7 +132,7 @@ raw_ioctl(struct inode *inode, struct fi
return blkdev_ioctl(bdev->bd_inode, NULL, command, arg);
}
-static void bind_device(struct raw_config_request *rq)
+static void __deprecated bind_device(struct raw_config_request *rq)
{
class_device_destroy(raw_class, MKDEV(RAW_MAJOR, rq->raw_minor));
class_device_create(raw_class, NULL, MKDEV(RAW_MAJOR, rq->raw_minor),
@@ -137,7 +143,7 @@ static void bind_device(struct raw_confi
* Deal with ioctls against the raw-device control interface, to bind
* and unbind other raw devices.
*/
-static int raw_ctl_ioctl(struct inode *inode, struct file *filp,
+static int __deprecated raw_ctl_ioctl(struct inode *inode, struct file *filp,
unsigned int command, unsigned long arg)
{
struct raw_config_request rq;
@@ -239,8 +245,8 @@ out:
return err;
}
-static ssize_t raw_file_write(struct file *file, const char __user *buf,
- size_t count, loff_t *ppos)
+static ssize_t __deprecated raw_file_write(struct file *file,
+ const char __user *buf, size_t count, loff_t *ppos)
{
struct iovec local_iov = {
.iov_base = (char __user *)buf,
@@ -250,8 +256,8 @@ static ssize_t raw_file_write(struct fil
return generic_file_write_nolock(file, &local_iov, 1, ppos);
}
-static ssize_t raw_file_aio_write(struct kiocb *iocb, const char __user *buf,
- size_t count, loff_t pos)
+static ssize_t __deprecated raw_file_aio_write(struct kiocb *iocb,
+ const char __user *buf, size_t count, loff_t pos)
{
struct iovec local_iov = {
.iov_base = (char __user *)buf,
@@ -324,7 +330,7 @@ error:
return 1;
}
-static void __exit raw_exit(void)
+static void __deprecated __exit raw_exit(void)
{
int i;
next prev parent reply other threads:[~2006-01-22 17:57 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-01-19 3:02 [2.6 patch] the scheduled removal of the obsolete raw driver Adrian Bunk
2006-01-19 3:41 ` Andrew Morton
2006-01-19 5:43 ` Chen, Kenneth W
2006-01-21 1:02 ` Adrian Bunk
2006-01-21 1:08 ` Chen, Kenneth W
2006-01-21 1:49 ` Alan Cox
2006-01-19 16:10 ` Adrian Bunk
2006-01-19 16:44 ` Badari Pulavarty
2006-01-19 16:52 ` Mark Lord
2006-01-19 16:58 ` Adrian Bunk
2006-01-19 18:14 ` Badari Pulavarty
2006-01-20 8:24 ` [SARCASM] " Ingo Oeser
2006-01-20 14:02 ` Jan Engelhardt
2006-01-22 12:51 ` [OT] " Alexander E. Patrakov
2006-01-21 8:52 ` Arjan van de Ven
2006-01-21 19:41 ` Dave Jones
2006-01-21 21:17 ` Andrew Morton
2006-01-21 21:25 ` Arjan van de Ven
2006-01-21 21:35 ` Andrew Morton
2006-01-21 21:50 ` Arjan van de Ven
2006-01-22 17:50 ` Jesper Juhl [this message]
2006-01-21 23:26 ` Gene Heskett
2006-01-21 23:30 ` Lee Revell
2006-01-21 23:53 ` Gene Heskett
2006-01-21 23:59 ` Doug McNaught
2006-01-22 0:09 ` Gene Heskett
2006-01-22 0:15 ` Lee Revell
2006-01-22 1:30 ` Doug McNaught
2006-01-22 8:14 ` Arjan van de Ven
2006-01-22 20:33 ` Alan Cox
2006-01-22 21:53 ` Jan Engelhardt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=9a8748490601220950o7306c082gaac72be87c333b8a@mail.gmail.com \
--to=jesper.juhl@gmail.com \
--cc=akpm@osdl.org \
--cc=arjan@infradead.org \
--cc=bunk@stusta.de \
--cc=davej@redhat.com \
--cc=kenneth.w.chen@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=pbadari@us.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox