* [PATCH v2 0/3] Persistent device name using alias name
@ 2011-07-22 10:59 Nao Nishijima
2011-07-22 10:59 ` [PATCH v2 1/3] sd: [BUGFIX] Use sd_printk instead of printk Nao Nishijima
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Nao Nishijima @ 2011-07-22 10:59 UTC (permalink / raw)
To: linux-kernel, linux-scsi
Cc: James.Bottomley, kay.sievers, jcm, coughlan, kzak, dle-develop,
Masami Hiramatsu, yrl.pp-manager.tt, greg, dgilbert, stefanr,
hare, joe
Hi,
This patch series provide an "alias name" of the disk into kernel messages.
Users can assign a preferred name to an alias name of the device.
A raw device name of a disk does not always point a same disk at each boot-up
time. Therefore, users have to use persistent device names, which udev creates
to always access the same disk. However, kernel messages still display the raw
device names.
My proposal is that users can use and see persistent device names which were
assigned by they because users expect same name to point same disk anytime.
Why need to modify kernel messages?
- We can see mapping of device names and persistent device names in udev log.
If those logs output to syslog, we can search persistent device name from
device name, but it can cause a large amount of syslog output.
- If we can use the persistent device names and can always see the same name on
the kernel log, we don't need to pay additional cost for searching and picking
a correct pair of device name and persistent device name from udev log.
- Kernel messages are output to serial console when kenel crashes,
it's so hard to convert device name to alias name.
Of course, I am going to modify the commands using device name so that users
can use alias names.
How to use:
1. Build and install the kernel with this series, and reboot with the kernel.
2. Make a script of get alias_name
[localhost]# vi /lib/udev/get_alias_name
#!/bin/sh -e
DEVNAME=`echo $1 | sed -e 's/[0-9]//g'`
echo "ALIAS=`cat /sys/block/$DEVNAME/alias_name`"
exit 0
And you should set an execute bit,
[localhost]# chmod +x /lib/udev/get_alias_name
3. Check disk's id
Here is an example to get the serial id and the path of the device.
[localhost]# udevadm info --query=property --path=/sys/block/sda \
| grep ID_SERIAL=
ID_SERIAL=0QEMU_QEMU_HARDDISK_drive-scsi0-0-1
Some devices does not have the serial id. For such devices,
you may use the device path.
[localhost]# udevadm info --query=property --path=/sys/block/sr0 \
| grep ID_PATH=
ID_PATH=pci-0000:00:01.1-scsi-1:0:0:0
4. Write udev rules as follows
(The user assigns "foo" to sda and "bar" to sr0)
We use ENV{ID_SERIAL} or ENV{ID_PATH} (get by 3) to identify a disk.
And to assign automatically an "alias name", we use ATTR key.
If ENV{ALIAS} is empty, we use to get an "alias_name" by get_alias_name script.
[localhost]# vi /etc/udev/rules.d/70-alias_name.rules
SUBSYSTEM!="block", GOTO="end"
# write alias name for sdX
KERNEL=="sd*[!0-9]", ACTION=="add", ATTR{alias_name}="foo", \
ENV{ID_SERIAL}=="0QEMU_QEMU_HARDDISK_drive-scsi0-0-1"
# write alias name for srX
KERNEL=="sr[0-9]", ACTION=="add", ATTR{alias_name}="bar", \
ENV{ID_PATH}=="pci-0000:00:01.1-scsi-1:0:0:0"
# make symlink
ENV{DEVTYPE}=="disk", ENV{ALIAS}=="?*", SYMLINK+="disk/by-alias/$env{ALIAS}"
ENV{DEVTYPE}=="partition", ENV{ALIAS}=="", \
IMPORT{program}="/lib/udev/get_alias_name %k"
ENV{DEVTYPE}=="partition", ENV{ALIAS}=="?*", \
SYMLINK+="disk/by-alias/$env{ALIAS}%n"
LABEL="end"
5. reboot
After reboot, we can see alias name in kernel messages.
[localhost]# ls -l /dev/disk/by-alias/
total 0
lrwxrwxrwx. 1 root root 9 Jul 1 21:21 bar -> ../../sr0
lrwxrwxrwx. 1 root root 9 Jul 1 21:21 foo -> ../../sda
lrwxrwxrwx. 1 root root 10 Jul 1 21:21 foo1 -> ../../sda1
[localhost]# dmesg
...
sd 2:0:0:0: [foo] sd_init_command: block=17382146, count=56
sd 2:0:0:0: [foo] block=17382146
sd 2:0:0:0: [foo] reading 56/56 512 byte blocks.
sd 2:0:0:0: [foo] Send: 0xffff88007ab1a900
...
Currently, the user must add the naming rule manually for new devices.
In the future, it is appended automatically, as like NIC.
Changes in v2:
- Change alias_name string to pointer
- Change alias_name writable to write at once
- Drop procfs patch
Best regards,
---
Joe Perches (1):
sd: modify printk for alias name
Nao Nishijima (2):
block: add a new attribute "alias name" in gendisk structure
sd: [BUGFIX] Use sd_printk instead of printk
Documentation/ABI/testing/sysfs-block | 15 ++++++
block/genhd.c | 84 +++++++++++++++++++++++++++++++++
drivers/scsi/scsi_lib.c | 26 ++++++++++
drivers/scsi/sd.c | 30 +++++++++++-
drivers/scsi/sd.h | 8 +--
include/linux/genhd.h | 4 ++
include/scsi/scsi_device.h | 8 +--
7 files changed, 162 insertions(+), 13 deletions(-)
--
Nao Nishijima (nao.nishijima.xt@hitachi.com)
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 1/3] sd: [BUGFIX] Use sd_printk instead of printk
2011-07-22 10:59 [PATCH v2 0/3] Persistent device name using alias name Nao Nishijima
@ 2011-07-22 10:59 ` Nao Nishijima
2011-07-22 10:59 ` [PATCH v2 2/3] block: add a new attribute "alias name" in gendisk structure Nao Nishijima
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Nao Nishijima @ 2011-07-22 10:59 UTC (permalink / raw)
To: linux-kernel, linux-scsi
Cc: James.Bottomley, kay.sievers, jcm, coughlan, kzak, dle-develop,
Masami Hiramatsu, yrl.pp-manager.tt, greg, dgilbert, stefanr,
hare, joe, Nao Nishijima
sd_ioctl still use printk for log output.
It should use sd_printk instead of printk, as well as other sd_*.
All SCSI messages should output via s*_printk instead of printk.
Signed-off-by: Nao Nishijima <nao.nishijima.xt@hitachi.com>
Reviewed-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
---
drivers/scsi/sd.c | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index 953773c..e434e5f 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -1066,12 +1066,13 @@ static int sd_ioctl(struct block_device *bdev, fmode_t mode,
unsigned int cmd, unsigned long arg)
{
struct gendisk *disk = bdev->bd_disk;
- struct scsi_device *sdp = scsi_disk(disk)->device;
+ struct scsi_disk *sdkp = scsi_disk(disk);
+ struct scsi_device *sdp = sdkp->device;
void __user *p = (void __user *)arg;
int error;
- SCSI_LOG_IOCTL(1, printk("sd_ioctl: disk=%s, cmd=0x%x\n",
- disk->disk_name, cmd));
+ SCSI_LOG_IOCTL(1, sd_printk(KERN_INFO, sdkp, "sd_ioctl: disk=%s,"
+ " cmd=0x%x\n", disk->disk_name, cmd));
/*
* If we are in the middle of error recovery, don't let anyone
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 2/3] block: add a new attribute "alias name" in gendisk structure
2011-07-22 10:59 [PATCH v2 0/3] Persistent device name using alias name Nao Nishijima
2011-07-22 10:59 ` [PATCH v2 1/3] sd: [BUGFIX] Use sd_printk instead of printk Nao Nishijima
@ 2011-07-22 10:59 ` Nao Nishijima
2011-07-22 11:00 ` [PATCH v2 3/3] sd: modify printk for alias name Nao Nishijima
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Nao Nishijima @ 2011-07-22 10:59 UTC (permalink / raw)
To: linux-kernel, linux-scsi
Cc: James.Bottomley, kay.sievers, jcm, coughlan, kzak, dle-develop,
Masami Hiramatsu, yrl.pp-manager.tt, greg, dgilbert, stefanr,
hare, joe, Nao Nishijima
This patch allows the user to set an "alias name" of the disk via sysfs
interface.
A raw device name of a disk does not always point a same disk at each boot-up
time. Therefore, users have to use persistent device names, which udev creates
to always access the same disk. However, kernel messages still display the raw
device names.
This patch adds a new attribute "alias name" in gendisk structure. And if users
set their preferred name to an "alias name" of the disk, it would be appeared
in kernel messages. A disk can have an "alias name" which length is up to
255bytes. Users can use alphabets, numbers, '-' and '_' in alias name.
Suggested-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Suggested-by: Jon Masters <jcm@redhat.com>
Signed-off-by: Nao Nishijima <nao.nishijima.xt@hitachi.com>
---
Documentation/ABI/testing/sysfs-block | 15 ++++++
block/genhd.c | 84 +++++++++++++++++++++++++++++++++
include/linux/genhd.h | 4 ++
3 files changed, 103 insertions(+), 0 deletions(-)
diff --git a/Documentation/ABI/testing/sysfs-block b/Documentation/ABI/testing/sysfs-block
index c1eb41c..c42be33 100644
--- a/Documentation/ABI/testing/sysfs-block
+++ b/Documentation/ABI/testing/sysfs-block
@@ -206,3 +206,18 @@ Description:
when a discarded area is read the discard_zeroes_data
parameter will be set to one. Otherwise it will be 0 and
the result of reading a discarded area is undefined.
+
+What: /sys/block/<disk>/alias_name
+Date: July 2011
+Contact: Nao Nishijima <nao.nishijima.xt@hitachi.com>
+Description:
+ A raw device name of a disk does not always point a same disk
+ each boot-up time. Therefore, users have to use persistent
+ device names, which udev creates when the kernel finds a disk,
+ instead of raw device name. However, kernel doesn't show those
+ persistent names on its message.
+ This file can store an alias name of the disk and it would be
+ appeared in kernel messages if it is set. A disk can have an
+ alias name which length is up to 255bytes. Users can use
+ use alphabets, numbers, "-" and "_" in alias name. An alias
+ name is write at once.
diff --git a/block/genhd.c b/block/genhd.c
index 3608289..04136e6 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -19,6 +19,7 @@
#include <linux/mutex.h>
#include <linux/idr.h>
#include <linux/log2.h>
+#include <linux/ctype.h>
#include "blk.h"
@@ -909,6 +910,86 @@ static int __init genhd_device_init(void)
subsys_initcall(genhd_device_init);
+static ssize_t alias_name_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct gendisk *disk = dev_to_disk(dev);
+ ssize_t ret = 0;
+
+ if (disk->alias_name)
+ ret = snprintf(buf, ALIAS_NAME_LEN + 1, "%s\n",
+ disk->alias_name);
+ return ret;
+}
+
+static ssize_t alias_name_store(struct device *dev,
+ struct device_attribute *attr, const char *buf,
+ size_t count)
+{
+ struct gendisk *disk = dev_to_disk(dev);
+ struct disk_part_iter piter;
+ struct hd_struct *part;
+
+ char *new_alias_name;
+ char *envp[] = { NULL, NULL };
+ unsigned char c;
+ int idx;
+ ssize_t ret = count;
+
+ if (!count)
+ return -EINVAL;
+
+ if (count >= ALIAS_NAME_LEN) {
+ printk(KERN_ERR "alias_name: alias name is too long\n");
+ return -EINVAL;
+ }
+
+ /* Validation check */
+ for (idx = 0; idx < count; idx++) {
+ c = buf[idx];
+ if (idx == count - 1 && c == '\n')
+ break;
+ if (!isalnum(c) && c != '_' && c != '-') {
+ printk(KERN_ERR "alias_name: invalid alias name\n");
+ return -EINVAL;
+ }
+ }
+
+ if (disk->alias_name) {
+ printk(KERN_INFO "alias_name: %s is already assigned (%s)\n",
+ disk->disk_name, disk->alias_name);
+ return -EINVAL;
+ }
+
+ new_alias_name = kasprintf(GFP_KERNEL, "%s", buf);
+ if (!new_alias_name)
+ return -ENOMEM;
+
+ if (new_alias_name[count - 1] == '\n')
+ new_alias_name[count - 1] = '\0';
+
+ envp[0] = kasprintf(GFP_KERNEL, "ALIAS=%s", new_alias_name);
+ if (!envp[0]) {
+ kfree(new_alias_name);
+ return -ENOMEM;
+ }
+
+ disk->alias_name = new_alias_name;
+ printk(KERN_INFO "alias_name: assigned %s to %s\n",
+ new_alias_name, disk->disk_name);
+
+ kobject_uevent_env(&dev->kobj, KOBJ_ADD, envp);
+
+ /* announce possible partitions */
+ disk_part_iter_init(&piter, disk, 0);
+ while ((part = disk_part_iter_next(&piter)))
+ kobject_uevent_env(&part_to_dev(part)->kobj, KOBJ_ADD, envp);
+ disk_part_iter_exit(&piter);
+
+ kfree(envp[0]);
+ return ret;
+}
+
static ssize_t disk_range_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
@@ -968,6 +1049,8 @@ static ssize_t disk_discard_alignment_show(struct device *dev,
return sprintf(buf, "%d\n", queue_discard_alignment(disk->queue));
}
+static DEVICE_ATTR(alias_name, S_IRUGO|S_IWUSR, alias_name_show,
+ alias_name_store);
static DEVICE_ATTR(range, S_IRUGO, disk_range_show, NULL);
static DEVICE_ATTR(ext_range, S_IRUGO, disk_ext_range_show, NULL);
static DEVICE_ATTR(removable, S_IRUGO, disk_removable_show, NULL);
@@ -990,6 +1073,7 @@ static struct device_attribute dev_attr_fail_timeout =
#endif
static struct attribute *disk_attrs[] = {
+ &dev_attr_alias_name.attr,
&dev_attr_range.attr,
&dev_attr_ext_range.attr,
&dev_attr_removable.attr,
diff --git a/include/linux/genhd.h b/include/linux/genhd.h
index 300d758..e9ad85d 100644
--- a/include/linux/genhd.h
+++ b/include/linux/genhd.h
@@ -21,6 +21,8 @@
#define dev_to_part(device) container_of((device), struct hd_struct, __dev)
#define disk_to_dev(disk) (&(disk)->part0.__dev)
#define part_to_dev(part) (&((part)->__dev))
+#define alias_name(disk) ((disk)->alias_name ? (disk)->alias_name \
+ : (disk)->disk_name)
extern struct device_type part_type;
extern struct kobject *block_depr;
@@ -58,6 +60,7 @@ enum {
#define DISK_MAX_PARTS 256
#define DISK_NAME_LEN 32
+#define ALIAS_NAME_LEN 256
#include <linux/major.h>
#include <linux/device.h>
@@ -162,6 +165,7 @@ struct gendisk {
* disks that can't be partitioned. */
char disk_name[DISK_NAME_LEN]; /* name of major driver */
+ char *alias_name; /* alias name of disk */
char *(*devnode)(struct gendisk *gd, mode_t *mode);
unsigned int events; /* supported events */
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 3/3] sd: modify printk for alias name
2011-07-22 10:59 [PATCH v2 0/3] Persistent device name using alias name Nao Nishijima
2011-07-22 10:59 ` [PATCH v2 1/3] sd: [BUGFIX] Use sd_printk instead of printk Nao Nishijima
2011-07-22 10:59 ` [PATCH v2 2/3] block: add a new attribute "alias name" in gendisk structure Nao Nishijima
@ 2011-07-22 11:00 ` Nao Nishijima
2011-07-22 13:32 ` [PATCH v2 0/3] Persistent device name using " Greg KH
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Nao Nishijima @ 2011-07-22 11:00 UTC (permalink / raw)
To: linux-kernel, linux-scsi
Cc: James.Bottomley, kay.sievers, jcm, coughlan, kzak, dle-develop,
Masami Hiramatsu, yrl.pp-manager.tt, greg, dgilbert, stefanr,
hare, joe, Joe Perches
From: Joe Perches <joe@perches.com>
Reduce size of code and text of scmd_printk and sd_printk
macros by converting to the macros to functions and using
vsprintf extension %pV. This moves the code out-of-line
and centralizes the code used to emit additional arguments.
Save ~32KB of space in an x86 allyesconfig.
$ size drivers/scsi/built-in.o*
text data bss dec hex filename
5860439 135396 1393024 7388859 70bebb drivers/scsi/built-in.o.new
5882368 135396 1395848 7413612 711f6c drivers/scsi/built-in.o.old
5887100 135396 1397264 7419760 713770 drivers/scsi/built-in.o.with_patch_1_and_2
Signed-off-by: Joe Perches <joe@perches.com>
Reviewed-by: Nao Nishijima <nao.nishijima.xt@hitachi.com>
---
drivers/scsi/scsi_lib.c | 26 ++++++++++++++++++++++++++
drivers/scsi/sd.c | 23 +++++++++++++++++++++++
drivers/scsi/sd.h | 8 +++-----
include/scsi/scsi_device.h | 8 +++-----
4 files changed, 55 insertions(+), 10 deletions(-)
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index ec1803a..249c54c 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -2571,3 +2571,29 @@ void scsi_kunmap_atomic_sg(void *virt)
kunmap_atomic(virt, KM_BIO_SRC_IRQ);
}
EXPORT_SYMBOL(scsi_kunmap_atomic_sg);
+
+/* Logging utilities */
+
+int scmd_printk(const char *prefix, const struct scsi_cmnd *scmd,
+ const char *format, ...)
+{
+ struct va_format vaf;
+ va_list args;
+ int r;
+
+ va_start(args, format);
+
+ vaf.fmt = format;
+ vaf.va = &args;
+
+ if (scmd->request->rq_disk)
+ r = sdev_printk(prefix, scmd->device, "[%s] %pV",
+ alias_name(scmd->request->rq_disk), &vaf);
+ else
+ r = sdev_printk(prefix, scmd->device, "%pV", &vaf);
+
+ va_end(args);
+
+ return r;
+}
+EXPORT_SYMBOL(scmd_printk);
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index e434e5f..bb1b3e5 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -2889,3 +2889,26 @@ static void sd_print_result(struct scsi_disk *sdkp, int result)
scsi_show_result(result);
}
+int sd_printk(const char *prefix, const struct scsi_disk *sdsk,
+ const char *format, ...)
+{
+ struct va_format vaf;
+ va_list args;
+ int r;
+
+ va_start(args, format);
+
+ vaf.fmt = format;
+ vaf.va = &args;
+
+ if (sdsk->disk)
+ r = sdev_printk(prefix, sdsk->device, "[%s] %pV",
+ alias_name(sdsk->disk), &vaf);
+ else
+ r = sdev_printk(prefix, sdsk->device, "%pV", &vaf);
+
+ va_end(args);
+
+ return r;
+}
+EXPORT_SYMBOL(sd_printk);
diff --git a/drivers/scsi/sd.h b/drivers/scsi/sd.h
index 6ad798b..46aa748 100644
--- a/drivers/scsi/sd.h
+++ b/drivers/scsi/sd.h
@@ -88,11 +88,9 @@ static inline struct scsi_disk *scsi_disk(struct gendisk *disk)
return container_of(disk->private_data, struct scsi_disk, driver);
}
-#define sd_printk(prefix, sdsk, fmt, a...) \
- (sdsk)->disk ? \
- sdev_printk(prefix, (sdsk)->device, "[%s] " fmt, \
- (sdsk)->disk->disk_name, ##a) : \
- sdev_printk(prefix, (sdsk)->device, fmt, ##a)
+extern __attribute__((format (printf, 3, 4)))
+int sd_printk(const char *prefix, const struct scsi_disk *sdsk,
+ const char *format, ...);
/*
* A DIF-capable target device can be formatted with different
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
index dd82e02..c79631b 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -216,11 +216,9 @@ struct scsi_dh_data {
#define sdev_printk(prefix, sdev, fmt, a...) \
dev_printk(prefix, &(sdev)->sdev_gendev, fmt, ##a)
-#define scmd_printk(prefix, scmd, fmt, a...) \
- (scmd)->request->rq_disk ? \
- sdev_printk(prefix, (scmd)->device, "[%s] " fmt, \
- (scmd)->request->rq_disk->disk_name, ##a) : \
- sdev_printk(prefix, (scmd)->device, fmt, ##a)
+extern __attribute__((format (printf, 3, 4)))
+int scmd_printk(const char *prefix, const struct scsi_cmnd *scmd,
+ const char *format, ...);
enum scsi_target_state {
STARGET_CREATED = 1,
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 0/3] Persistent device name using alias name
2011-07-22 10:59 [PATCH v2 0/3] Persistent device name using alias name Nao Nishijima
` (2 preceding siblings ...)
2011-07-22 11:00 ` [PATCH v2 3/3] sd: modify printk for alias name Nao Nishijima
@ 2011-07-22 13:32 ` Greg KH
2011-07-25 11:22 ` Karel Zak
2011-07-29 9:09 ` Nao Nishijima
5 siblings, 0 replies; 7+ messages in thread
From: Greg KH @ 2011-07-22 13:32 UTC (permalink / raw)
To: Nao Nishijima
Cc: linux-kernel, linux-scsi, James.Bottomley, kay.sievers, jcm,
coughlan, kzak, dle-develop, Masami Hiramatsu, yrl.pp-manager.tt,
dgilbert, stefanr, hare, joe
On Fri, Jul 22, 2011 at 07:59:26PM +0900, Nao Nishijima wrote:
> Hi,
>
> This patch series provide an "alias name" of the disk into kernel messages.
> Users can assign a preferred name to an alias name of the device.
>
> A raw device name of a disk does not always point a same disk at each boot-up
> time. Therefore, users have to use persistent device names, which udev creates
> to always access the same disk. However, kernel messages still display the raw
> device names.
>
> My proposal is that users can use and see persistent device names which were
> assigned by they because users expect same name to point same disk anytime.
>
> Why need to modify kernel messages?
> - We can see mapping of device names and persistent device names in udev log.
> If those logs output to syslog, we can search persistent device name from
> device name, but it can cause a large amount of syslog output.
>
> - If we can use the persistent device names and can always see the same name on
> the kernel log, we don't need to pay additional cost for searching and picking
> a correct pair of device name and persistent device name from udev log.
>
> - Kernel messages are output to serial console when kenel crashes,
> it's so hard to convert device name to alias name.
>
>
> Of course, I am going to modify the commands using device name so that users
> can use alias names.
Please do that first, and then you will not need any kernel changes in
the first place :)
Anyway, you all know my objections to this patch series, but again, as
I'm not the block subsystem maintainer, I really can't do anything.
greg k-h
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 0/3] Persistent device name using alias name
2011-07-22 10:59 [PATCH v2 0/3] Persistent device name using alias name Nao Nishijima
` (3 preceding siblings ...)
2011-07-22 13:32 ` [PATCH v2 0/3] Persistent device name using " Greg KH
@ 2011-07-25 11:22 ` Karel Zak
2011-07-29 9:09 ` Nao Nishijima
5 siblings, 0 replies; 7+ messages in thread
From: Karel Zak @ 2011-07-25 11:22 UTC (permalink / raw)
To: Nao Nishijima
Cc: linux-kernel, linux-scsi, James.Bottomley, kay.sievers, jcm,
coughlan, dle-develop, Masami Hiramatsu, yrl.pp-manager.tt, greg,
dgilbert, stefanr, hare, joe
On Fri, Jul 22, 2011 at 07:59:26PM +0900, Nao Nishijima wrote:
> Changes in v2:
> - Drop procfs patch
Thanks.
Karel
--
Karel Zak <kzak@redhat.com>
http://karelzak.blogspot.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 0/3] Persistent device name using alias name
2011-07-22 10:59 [PATCH v2 0/3] Persistent device name using alias name Nao Nishijima
` (4 preceding siblings ...)
2011-07-25 11:22 ` Karel Zak
@ 2011-07-29 9:09 ` Nao Nishijima
5 siblings, 0 replies; 7+ messages in thread
From: Nao Nishijima @ 2011-07-29 9:09 UTC (permalink / raw)
To: JBottomley
Cc: Nao Nishijima, linux-kernel, linux-scsi, James.Bottomley,
dle-develop, Masami Hiramatsu, yrl.pp-manager.tt, axboe
Hi James,
Could you review this patches?
Best regards,
(2011/07/22 19:59), Nao Nishijima wrote:
> Hi,
>
> This patch series provide an "alias name" of the disk into kernel messages.
> Users can assign a preferred name to an alias name of the device.
>
> A raw device name of a disk does not always point a same disk at each boot-up
> time. Therefore, users have to use persistent device names, which udev creates
> to always access the same disk. However, kernel messages still display the raw
> device names.
>
> My proposal is that users can use and see persistent device names which were
> assigned by they because users expect same name to point same disk anytime.
>
> Why need to modify kernel messages?
> - We can see mapping of device names and persistent device names in udev log.
> If those logs output to syslog, we can search persistent device name from
> device name, but it can cause a large amount of syslog output.
>
> - If we can use the persistent device names and can always see the same name on
> the kernel log, we don't need to pay additional cost for searching and picking
> a correct pair of device name and persistent device name from udev log.
>
> - Kernel messages are output to serial console when kenel crashes,
> it's so hard to convert device name to alias name.
>
>
> Of course, I am going to modify the commands using device name so that users
> can use alias names.
>
>
> How to use:
> 1. Build and install the kernel with this series, and reboot with the kernel.
>
> 2. Make a script of get alias_name
>
> [localhost]# vi /lib/udev/get_alias_name
> #!/bin/sh -e
> DEVNAME=`echo $1 | sed -e 's/[0-9]//g'`
> echo "ALIAS=`cat /sys/block/$DEVNAME/alias_name`"
> exit 0
>
> And you should set an execute bit,
> [localhost]# chmod +x /lib/udev/get_alias_name
>
> 3. Check disk's id
> Here is an example to get the serial id and the path of the device.
>
> [localhost]# udevadm info --query=property --path=/sys/block/sda \
> | grep ID_SERIAL=
> ID_SERIAL=0QEMU_QEMU_HARDDISK_drive-scsi0-0-1
>
> Some devices does not have the serial id. For such devices,
> you may use the device path.
>
> [localhost]# udevadm info --query=property --path=/sys/block/sr0 \
> | grep ID_PATH=
> ID_PATH=pci-0000:00:01.1-scsi-1:0:0:0
>
>
> 4. Write udev rules as follows
> (The user assigns "foo" to sda and "bar" to sr0)
> We use ENV{ID_SERIAL} or ENV{ID_PATH} (get by 3) to identify a disk.
> And to assign automatically an "alias name", we use ATTR key.
> If ENV{ALIAS} is empty, we use to get an "alias_name" by get_alias_name script.
>
> [localhost]# vi /etc/udev/rules.d/70-alias_name.rules
> SUBSYSTEM!="block", GOTO="end"
>
> # write alias name for sdX
> KERNEL=="sd*[!0-9]", ACTION=="add", ATTR{alias_name}="foo", \
> ENV{ID_SERIAL}=="0QEMU_QEMU_HARDDISK_drive-scsi0-0-1"
>
> # write alias name for srX
> KERNEL=="sr[0-9]", ACTION=="add", ATTR{alias_name}="bar", \
> ENV{ID_PATH}=="pci-0000:00:01.1-scsi-1:0:0:0"
>
> # make symlink
> ENV{DEVTYPE}=="disk", ENV{ALIAS}=="?*", SYMLINK+="disk/by-alias/$env{ALIAS}"
> ENV{DEVTYPE}=="partition", ENV{ALIAS}=="", \
> IMPORT{program}="/lib/udev/get_alias_name %k"
> ENV{DEVTYPE}=="partition", ENV{ALIAS}=="?*", \
> SYMLINK+="disk/by-alias/$env{ALIAS}%n"
>
> LABEL="end"
>
>
> 5. reboot
> After reboot, we can see alias name in kernel messages.
>
> [localhost]# ls -l /dev/disk/by-alias/
> total 0
> lrwxrwxrwx. 1 root root 9 Jul 1 21:21 bar -> ../../sr0
> lrwxrwxrwx. 1 root root 9 Jul 1 21:21 foo -> ../../sda
> lrwxrwxrwx. 1 root root 10 Jul 1 21:21 foo1 -> ../../sda1
>
> [localhost]# dmesg
> ...
> sd 2:0:0:0: [foo] sd_init_command: block=17382146, count=56
> sd 2:0:0:0: [foo] block=17382146
> sd 2:0:0:0: [foo] reading 56/56 512 byte blocks.
> sd 2:0:0:0: [foo] Send: 0xffff88007ab1a900
> ...
>
> Currently, the user must add the naming rule manually for new devices.
> In the future, it is appended automatically, as like NIC.
>
> Changes in v2:
> - Change alias_name string to pointer
> - Change alias_name writable to write at once
> - Drop procfs patch
>
> Best regards,
>
> ---
>
> Joe Perches (1):
> sd: modify printk for alias name
>
> Nao Nishijima (2):
> block: add a new attribute "alias name" in gendisk structure
> sd: [BUGFIX] Use sd_printk instead of printk
>
>
> Documentation/ABI/testing/sysfs-block | 15 ++++++
> block/genhd.c | 84 +++++++++++++++++++++++++++++++++
> drivers/scsi/scsi_lib.c | 26 ++++++++++
> drivers/scsi/sd.c | 30 +++++++++++-
> drivers/scsi/sd.h | 8 +--
> include/linux/genhd.h | 4 ++
> include/scsi/scsi_device.h | 8 +--
> 7 files changed, 162 insertions(+), 13 deletions(-)
>
>
> --
> Nao Nishijima (nao.nishijima.xt@hitachi.com)
>
--
Nao NISHIJIMA
Software Platform Research Dept. Linux Technology Center
Hitachi, Ltd., YOKOHAMA Research Laboratory
Email: nao.nishijima.xt@hitachi.com
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2011-07-29 9:09 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-07-22 10:59 [PATCH v2 0/3] Persistent device name using alias name Nao Nishijima
2011-07-22 10:59 ` [PATCH v2 1/3] sd: [BUGFIX] Use sd_printk instead of printk Nao Nishijima
2011-07-22 10:59 ` [PATCH v2 2/3] block: add a new attribute "alias name" in gendisk structure Nao Nishijima
2011-07-22 11:00 ` [PATCH v2 3/3] sd: modify printk for alias name Nao Nishijima
2011-07-22 13:32 ` [PATCH v2 0/3] Persistent device name using " Greg KH
2011-07-25 11:22 ` Karel Zak
2011-07-29 9:09 ` Nao Nishijima
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox