Compare commits
26 Commits
a1b24ee147
...
b8aac5014c
Author | SHA1 | Date |
---|---|---|
Zbigniew Jędrzejewski-Szmek | b8aac5014c | |
Yu Watanabe | 6272aef5ff | |
Yu Watanabe | 72585a584d | |
Zbigniew Jędrzejewski-Szmek | d61db498bf | |
Michal Sekletár | 30f6dce62c | |
Michal Sekletár | a59b0a9f76 | |
Martin Wilck | dec8e6cfb4 | |
Martin Wilck | cbeb23d863 | |
Martin Wilck | f1cb086054 | |
Martin Wilck | 0ed1b64469 | |
Martin Wilck | eb44d715eb | |
Martin Wilck | 2ab0a8d00b | |
Martin Wilck | 4a0ec82daf | |
Martin Wilck | b95c43982a | |
Martin Wilck | a96cd21d31 | |
Martin Wilck | 2084fe0d32 | |
Martin Wilck | 86634df43b | |
Martin Wilck | 06d4d4e24e | |
Martin Wilck | 17cce03153 | |
Martin Wilck | 46bc71b2b7 | |
Martin Wilck | e62acc3159 | |
Martin Wilck | 997683c8f1 | |
Martin Wilck | f0dccf01a7 | |
Martin Wilck | 09a4062d70 | |
Martin Wilck | af7ee3eae6 | |
Martin Wilck | 255c05b724 |
|
@ -408,7 +408,8 @@ bool stat_inode_unmodified(const struct stat *a, const struct stat *b) {
|
|||
return a && b &&
|
||||
(a->st_mode & S_IFMT) != 0 && /* We use the check for .st_mode if the structure was ever initialized */
|
||||
((a->st_mode ^ b->st_mode) & S_IFMT) == 0 && /* same inode type */
|
||||
a->st_mtime == b->st_mtime &&
|
||||
a->st_mtim.tv_sec == b->st_mtim.tv_sec &&
|
||||
a->st_mtim.tv_nsec == b->st_mtim.tv_nsec &&
|
||||
(!S_ISREG(a->st_mode) || a->st_size == b->st_size) && /* if regular file, compare file size */
|
||||
a->st_dev == b->st_dev &&
|
||||
a->st_ino == b->st_ino &&
|
||||
|
|
|
@ -1710,6 +1710,8 @@ static int socket_open_fds(Socket *_s) {
|
|||
_cleanup_free_ char *ep = NULL;
|
||||
|
||||
ep = path_make_absolute("ep0", p->path);
|
||||
if (!ep)
|
||||
return -ENOMEM;
|
||||
|
||||
p->fd = usbffs_address_create(ep);
|
||||
if (p->fd < 0)
|
||||
|
|
|
@ -581,7 +581,7 @@ const char *bus_error_message(const sd_bus_error *e, int error) {
|
|||
return e->message;
|
||||
}
|
||||
|
||||
return strerror_safe(abs(error));
|
||||
return strerror_safe(error);
|
||||
}
|
||||
|
||||
static bool map_ok(const sd_bus_error_map *map) {
|
||||
|
|
|
@ -19,7 +19,10 @@ static int builtin_net_setup_link(sd_device *dev, int argc, char **argv, bool te
|
|||
return log_device_error_errno(dev, SYNTHETIC_ERRNO(EINVAL), "This program takes no arguments.");
|
||||
|
||||
r = link_get_driver(ctx, dev, &driver);
|
||||
if (r >= 0)
|
||||
if (r < 0)
|
||||
log_device_full_errno(dev, r == -EOPNOTSUPP ? LOG_DEBUG : LOG_WARNING,
|
||||
r, "Failed to query device driver: %m");
|
||||
else
|
||||
udev_builtin_add_property(dev, test, "ID_NET_DRIVER", driver);
|
||||
|
||||
r = link_config_get(ctx, dev, &link);
|
||||
|
|
|
@ -1041,6 +1041,13 @@ int udev_event_execute_rules(UdevEvent *event,
|
|||
if (r < 0)
|
||||
return log_device_debug_errno(dev, r, "Failed to update database under /run/udev/data/: %m");
|
||||
|
||||
/* Yes, we run update_devnode() twice, because in the first invocation, that is before update of udev database,
|
||||
* it could happen that two contenders are replacing each other's symlink. Hence we run it again to make sure
|
||||
* symlinks point to devices that claim them with the highest priority. */
|
||||
r = update_devnode(event);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
device_set_is_initialized(dev);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -20,12 +20,15 @@
|
|||
#include "path-util.h"
|
||||
#include "selinux-util.h"
|
||||
#include "smack-util.h"
|
||||
#include "stat-util.h"
|
||||
#include "stdio-util.h"
|
||||
#include "string-util.h"
|
||||
#include "strxcpyx.h"
|
||||
#include "udev-node.h"
|
||||
#include "user-util.h"
|
||||
|
||||
#define LINK_UPDATE_MAX_RETRIES 128
|
||||
|
||||
static int node_symlink(sd_device *dev, const char *node, const char *slink) {
|
||||
_cleanup_free_ char *slink_dirname = NULL, *target = NULL;
|
||||
const char *id_filename, *slink_tmp;
|
||||
|
@ -99,7 +102,9 @@ static int node_symlink(sd_device *dev, const char *node, const char *slink) {
|
|||
if (rename(slink_tmp, slink) < 0) {
|
||||
r = log_device_error_errno(dev, errno, "Failed to rename '%s' to '%s': %m", slink_tmp, slink);
|
||||
(void) unlink(slink_tmp);
|
||||
}
|
||||
} else
|
||||
/* Tell caller that we replaced already existing symlink. */
|
||||
r = 1;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
@ -192,7 +197,7 @@ static int link_update(sd_device *dev, const char *slink, bool add) {
|
|||
_cleanup_free_ char *target = NULL, *filename = NULL, *dirname = NULL;
|
||||
char name_enc[PATH_MAX];
|
||||
const char *id_filename;
|
||||
int r;
|
||||
int i, r, retries;
|
||||
|
||||
assert(dev);
|
||||
assert(slink);
|
||||
|
@ -212,14 +217,6 @@ static int link_update(sd_device *dev, const char *slink, bool add) {
|
|||
if (!add && unlink(filename) == 0)
|
||||
(void) rmdir(dirname);
|
||||
|
||||
r = link_find_prioritized(dev, add, dirname, &target);
|
||||
if (r < 0) {
|
||||
log_device_debug(dev, "No reference left, removing '%s'", slink);
|
||||
if (unlink(slink) == 0)
|
||||
(void) rmdir_parents(slink, "/");
|
||||
} else
|
||||
(void) node_symlink(dev, target, slink);
|
||||
|
||||
if (add)
|
||||
do {
|
||||
_cleanup_close_ int fd = -1;
|
||||
|
@ -232,7 +229,49 @@ static int link_update(sd_device *dev, const char *slink, bool add) {
|
|||
r = -errno;
|
||||
} while (r == -ENOENT);
|
||||
|
||||
return r;
|
||||
/* If the database entry is not written yet we will just do one iteration and possibly wrong symlink
|
||||
* will be fixed in the second invocation. */
|
||||
retries = sd_device_get_is_initialized(dev) > 0 ? LINK_UPDATE_MAX_RETRIES : 1;
|
||||
|
||||
for (i = 0; i < retries; i++) {
|
||||
struct stat st1 = {}, st2 = {};
|
||||
|
||||
r = stat(dirname, &st1);
|
||||
if (r < 0 && errno != ENOENT)
|
||||
return -errno;
|
||||
|
||||
r = link_find_prioritized(dev, add, dirname, &target);
|
||||
if (r == -ENOENT) {
|
||||
log_device_debug(dev, "No reference left, removing '%s'", slink);
|
||||
if (unlink(slink) == 0)
|
||||
(void) rmdir_parents(slink, "/");
|
||||
|
||||
break;
|
||||
} else if (r < 0)
|
||||
return log_device_error_errno(dev, r, "Failed to determine highest priority symlink: %m");
|
||||
|
||||
r = node_symlink(dev, target, slink);
|
||||
if (r < 0) {
|
||||
(void) unlink(filename);
|
||||
break;
|
||||
} else if (r == 1)
|
||||
/* We have replaced already existing symlink, possibly there is some other device trying
|
||||
* to claim the same symlink. Let's do one more iteration to give us a chance to fix
|
||||
* the error if other device actually claims the symlink with higher priority. */
|
||||
continue;
|
||||
|
||||
/* Skip the second stat() if the first failed, stat_inode_unmodified() would return false regardless. */
|
||||
if ((st1.st_mode & S_IFMT) != 0) {
|
||||
r = stat(dirname, &st2);
|
||||
if (r < 0 && errno != ENOENT)
|
||||
return -errno;
|
||||
|
||||
if (stat_inode_unmodified(&st1, &st2))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return i < LINK_UPDATE_MAX_RETRIES ? 0 : -ELOOP;
|
||||
}
|
||||
|
||||
int udev_node_update_old_links(sd_device *dev, sd_device *dev_old) {
|
||||
|
@ -451,8 +490,11 @@ int udev_node_add(sd_device *dev, bool apply,
|
|||
(void) node_symlink(dev, devnode, filename);
|
||||
|
||||
/* create/update symlinks, add symlinks to name index */
|
||||
FOREACH_DEVICE_DEVLINK(dev, devlink)
|
||||
(void) link_update(dev, devlink, true);
|
||||
FOREACH_DEVICE_DEVLINK(dev, devlink) {
|
||||
r = link_update(dev, devlink, true);
|
||||
if (r < 0)
|
||||
log_device_info_errno(dev, r, "Failed to update device symlinks: %m");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -465,8 +507,11 @@ int udev_node_remove(sd_device *dev) {
|
|||
assert(dev);
|
||||
|
||||
/* remove/update symlinks, remove symlinks from name index */
|
||||
FOREACH_DEVICE_DEVLINK(dev, devlink)
|
||||
(void) link_update(dev, devlink, false);
|
||||
FOREACH_DEVICE_DEVLINK(dev, devlink) {
|
||||
r = link_update(dev, devlink, false);
|
||||
if (r < 0)
|
||||
log_device_info_errno(dev, r, "Failed to update device symlinks: %m");
|
||||
}
|
||||
|
||||
r = xsprintf_dev_num_path_from_sd_device(dev, &filename);
|
||||
if (r < 0)
|
||||
|
|
|
@ -0,0 +1,342 @@
|
|||
#!/usr/bin/env python3
|
||||
# SPDX-License-Identifier: LGPL-2.1+
|
||||
#
|
||||
# sd-script.py: create LOTS of sd device entries in fake sysfs
|
||||
#
|
||||
# (C) 2018 Martin Wilck, SUSE Linux GmbH
|
||||
#
|
||||
# Run after sys-script.py
|
||||
# Usage: sd-script.py <directory> <num>
|
||||
# <num> is the number of device nodes (disks + partititions)
|
||||
# to create in addition to what sys-script.py already did.
|
||||
# The script can be run several times in a row if <num> is increased,
|
||||
# adding yet more device entries.
|
||||
# Tested up to 1000 entries, more are possible.
|
||||
# Note that sys-script.py already creates 10 sd device nodes
|
||||
# (sda+sdb and partitions). This script starts with sdc.
|
||||
|
||||
import re
|
||||
import os
|
||||
import errno
|
||||
import sys
|
||||
|
||||
def d(path, mode):
|
||||
os.mkdir(path, mode)
|
||||
|
||||
def l(path, src):
|
||||
os.symlink(src, path)
|
||||
|
||||
def f(path, mode, contents):
|
||||
with open(path, "wb") as f:
|
||||
f.write(contents)
|
||||
os.chmod(path, mode)
|
||||
|
||||
class SD(object):
|
||||
|
||||
sd_major = [8] + list(range(65, 72)) + list(range(128, 136))
|
||||
_name_re = re.compile(r'sd(?P<f>[a-z]*)$')
|
||||
|
||||
def _init_from_name(self, name):
|
||||
mt = self._name_re.match(name)
|
||||
if mt is None:
|
||||
raise RuntimeError("invalid name %s" % name)
|
||||
nm = mt.group("f")
|
||||
base = 1
|
||||
ls = nm[-1]
|
||||
nm = nm[:-1]
|
||||
n = base * (ord(ls)-ord('a'))
|
||||
while len(nm) > 0:
|
||||
ls = nm[-1]
|
||||
nm = nm[:-1]
|
||||
base *= 26
|
||||
n += base * (1 + ord(ls)-ord('a'))
|
||||
self._num = n
|
||||
|
||||
def _init_from_dev(self, dev):
|
||||
maj, min = dev.split(":")
|
||||
maj = self.sd_major.index(int(maj, 10))
|
||||
min = int(min, 10)
|
||||
num = int(min / 16)
|
||||
self._num = 16*maj + num%16 + 256*int(num/16)
|
||||
|
||||
@staticmethod
|
||||
def _disk_num(a, b):
|
||||
n = ord(a)-ord('a')
|
||||
if b != '':
|
||||
n = 26 * (n+1) + ord(b)-ord('a')
|
||||
return n
|
||||
|
||||
@staticmethod
|
||||
def _get_major(n):
|
||||
return SD.sd_major[(n%256)//16]
|
||||
@staticmethod
|
||||
def _get_minor(n):
|
||||
return 16 * (n % 16 + 16 * n//256)
|
||||
|
||||
@staticmethod
|
||||
def _get_name(n):
|
||||
# see sd_format_disk_name() (sd.c)
|
||||
s = chr(n % 26 + ord('a'))
|
||||
n = n // 26 - 1
|
||||
while n >= 0:
|
||||
s = chr(n % 26 + ord('a')) + s
|
||||
n = n // 26 - 1
|
||||
return "sd" + s
|
||||
|
||||
@staticmethod
|
||||
def _get_dev_t(n):
|
||||
maj = SD._get_major(n)
|
||||
min = SD._get_minor(n)
|
||||
return (maj << 20) + min
|
||||
|
||||
def __init__(self, arg):
|
||||
if type(arg) is type(0):
|
||||
self._num = arg
|
||||
elif arg.startswith("sd"):
|
||||
self._init_from_name(arg)
|
||||
else:
|
||||
self._init_from_dev(arg)
|
||||
|
||||
def __cmp__(self, other):
|
||||
return cmp(self._num, other._num)
|
||||
|
||||
def __hash__(self):
|
||||
return hash(self._num)
|
||||
|
||||
def __str__(self):
|
||||
return "%s/%s" % (
|
||||
self.devstr(),
|
||||
self._get_name(self._num))
|
||||
|
||||
def major(self):
|
||||
return self._get_major(self._num)
|
||||
|
||||
def minor(self):
|
||||
return self._get_minor(self._num)
|
||||
|
||||
def devstr(self):
|
||||
return "%d:%d" % (self._get_major(self._num),
|
||||
self._get_minor(self._num))
|
||||
|
||||
def namestr(self):
|
||||
return self._get_name(self._num)
|
||||
|
||||
def longstr(self):
|
||||
return "%d\t%s\t%s\t%08x" % (self._num,
|
||||
self.devstr(),
|
||||
self.namestr(),
|
||||
self._get_dev_t(self._num))
|
||||
|
||||
class MySD(SD):
|
||||
def subst(self, first_sg):
|
||||
disk = {
|
||||
"lun": self._num,
|
||||
"major": self.major(),
|
||||
"devnode": self.namestr(),
|
||||
"disk_minor": self.minor(),
|
||||
"sg_minor": first_sg + self._num,
|
||||
}
|
||||
return disk
|
||||
|
||||
disk_template = r"""\
|
||||
l('sys/bus/scsi/drivers/sd/7:0:0:{lun}', '../../../../devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}')
|
||||
l('sys/bus/scsi/devices/7:0:0:{lun}', '../../../devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}')
|
||||
l('sys/dev/char/254:{sg_minor}', '../../devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/bsg/7:0:0:{lun}')
|
||||
l('sys/dev/char/21:{sg_minor}', '../../devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_generic/sg{sg_minor}')
|
||||
l('sys/class/scsi_disk/7:0:0:{lun}', '../../devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_disk/7:0:0:{lun}')
|
||||
l('sys/class/scsi_generic/sg{sg_minor}', '../../devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_generic/sg{sg_minor}')
|
||||
l('sys/class/bsg/7:0:0:{lun}', '../../devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/bsg/7:0:0:{lun}')
|
||||
l('sys/class/scsi_device/7:0:0:{lun}', '../../devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_device/7:0:0:{lun}')
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}', 0o755)
|
||||
l('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/generic', 'scsi_generic/sg{sg_minor}')
|
||||
l('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/subsystem', '../../../../../../../../../bus/scsi')
|
||||
l('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/driver', '../../../../../../../../../bus/scsi/drivers/sd')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/iodone_cnt', 0o644, b'0xc3\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/device_blocked', 0o644, b'0\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/max_sectors', 0o644, b'240\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/modalias', 0o644, b'scsi:t-0x00\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_level', 0o644, b'3\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/queue_depth', 0o644, b'1\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/rev', 0o644, b'1.00\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/type', 0o644, b'0\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/iocounterbits', 0o644, b'32\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/vendor', 0o644, b'Generic \n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/state', 0o644, b'running\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/queue_type', 0o644, b'none\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/iorequest_cnt', 0o644, b'0xc3\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/evt_media_change', 0o644, b'0\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/model', 0o644, b'USB Flash Drive \n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/ioerr_cnt', 0o644, b'0x2\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/uevent', 0o644, b'''DEVTYPE=scsi_device
|
||||
DRIVER=sd
|
||||
MODALIAS=scsi:t-0x00
|
||||
''')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/timeout', 0o644, b'60\n')
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_disk', 0o755)
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_disk/7:0:0:{lun}', 0o755)
|
||||
l('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_disk/7:0:0:{lun}/subsystem', '../../../../../../../../../../../class/scsi_disk')
|
||||
l('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_disk/7:0:0:{lun}/device', '../../../7:0:0:{lun}')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_disk/7:0:0:{lun}/app_tag_own', 0o644, b'0\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_disk/7:0:0:{lun}/FUA', 0o644, b'0\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_disk/7:0:0:{lun}/cache_type', 0o644, b'write through\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_disk/7:0:0:{lun}/protection_type', 0o644, b'0\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_disk/7:0:0:{lun}/manage_start_stop', 0o644, b'0\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_disk/7:0:0:{lun}/allow_restart', 0o644, b'1\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_disk/7:0:0:{lun}/uevent', 0o644, b'')
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_disk/7:0:0:{lun}/power', 0o755)
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_disk/7:0:0:{lun}/power/wakeup', 0o644, b'\n')
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/power', 0o755)
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/power/wakeup', 0o644, b'\n')
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_generic', 0o755)
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_generic/sg{sg_minor}', 0o755)
|
||||
l('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_generic/sg{sg_minor}/subsystem', '../../../../../../../../../../../class/scsi_generic')
|
||||
l('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_generic/sg{sg_minor}/device', '../../../7:0:0:{lun}')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_generic/sg{sg_minor}/dev', 0o644, b'21:{sg_minor}\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_generic/sg{sg_minor}/uevent', 0o644, b'''MAJOR=21
|
||||
MINOR={sg_minor}
|
||||
''')
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_generic/sg{sg_minor}/power', 0o755)
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_generic/sg{sg_minor}/power/wakeup', 0o644, b'\n')
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/bsg', 0o755)
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/bsg/7:0:0:{lun}', 0o755)
|
||||
l('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/bsg/7:0:0:{lun}/subsystem', '../../../../../../../../../../../class/bsg')
|
||||
l('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/bsg/7:0:0:{lun}/device', '../../../7:0:0:{lun}')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/bsg/7:0:0:{lun}/dev', 0o644, b'254:{sg_minor}\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/bsg/7:0:0:{lun}/uevent', 0o644, b'''MAJOR=254
|
||||
MINOR={sg_minor}
|
||||
''')
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/bsg/7:0:0:{lun}/power', 0o755)
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/bsg/7:0:0:{lun}/power/wakeup', 0o644, b'\n')
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block', 0o755)
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_device', 0o755)
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_device/7:0:0:{lun}', 0o755)
|
||||
l('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_device/7:0:0:{lun}/subsystem', '../../../../../../../../../../../class/scsi_device')
|
||||
l('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_device/7:0:0:{lun}/device', '../../../7:0:0:{lun}')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_device/7:0:0:{lun}/uevent', 0o644, b'')
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_device/7:0:0:{lun}/power', 0o755)
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/scsi_device/7:0:0:{lun}/power/wakeup', 0o644, b'\n')
|
||||
l('sys/dev/block/{major}:{disk_minor}', '../../devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}')
|
||||
l('sys/class/block/{devnode}', '../../devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}')
|
||||
l('sys/block/{devnode}', '../devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}')
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}', 0o755)
|
||||
l('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/subsystem', '../../../../../../../../../../../class/block')
|
||||
l('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/bdi', '../../../../../../../../../../virtual/bdi/{major}:{disk_minor}')
|
||||
l('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/device', '../../../7:0:0:{lun}')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/capability', 0o644, b'13\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/ro', 0o644, b'0\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/make-it-fail', 0o644, b'0\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/size', 0o644, b'257024\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/dev', 0o644, b'{major}:{disk_minor}\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/range', 0o644, b'16\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/removable', 0o644, b'1\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/stat', 0o644, b' 117 409 2103 272 0 0 0 0 0 194 272\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/uevent', 0o644, b'''MAJOR={major}
|
||||
MINOR={disk_minor}
|
||||
DEVTYPE=disk
|
||||
DEVNAME={devnode}
|
||||
''')
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/queue', 0o755)
|
||||
l('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/queue/bsg', '../../../bsg/7:0:0:{lun}')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/queue/nr_requests', 0o644, b'128\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/queue/nomerges', 0o644, b'0\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/queue/scheduler', 0o644, b'noop anticipatory deadline [cfq] \n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/queue/hw_sector_size', 0o644, b'512\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/queue/max_hw_sectors_kb', 0o644, b'120\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/queue/read_ahead_kb', 0o644, b'128\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/queue/max_sectors_kb', 0o644, b'120\n')
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/queue/iosched', 0o755)
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/queue/iosched/slice_async_rq', 0o644, b'2\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/queue/iosched/back_seek_max', 0o644, b'16384\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/queue/iosched/slice_sync', 0o644, b'100\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/queue/iosched/slice_async', 0o644, b'40\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/queue/iosched/fifo_expire_sync', 0o644, b'125\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/queue/iosched/slice_idle', 0o644, b'8\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/queue/iosched/back_seek_penalty', 0o644, b'2\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/queue/iosched/fifo_expire_async', 0o644, b'250\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/queue/iosched/quantum', 0o644, b'4\n')
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/power', 0o755)
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/power/wakeup', 0o644, b'\n')
|
||||
"""
|
||||
|
||||
part_template = r"""\
|
||||
l('sys/dev/block/{major}:{part_minor}', '../../devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/{devnode}{part_num}')
|
||||
l('sys/class/block/{devnode}{part_num}', '../../devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/{devnode}{part_num}')
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/{devnode}{part_num}', 0o755)
|
||||
l('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/{devnode}{part_num}/subsystem', '../../../../../../../../../../../../class/block')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/{devnode}{part_num}/start', 0o644, b'32\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/{devnode}{part_num}/make-it-fail', 0o644, b'0\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/{devnode}{part_num}/size', 0o644, b'256992\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/{devnode}{part_num}/dev', 0o644, b'{major}:{part_minor}\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/{devnode}{part_num}/stat', 0o644, b' 109 392 1903 246 0 0 0 0 0 169 246\n')
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:{lun}/block/{devnode}/{devnode}{part_num}/uevent', 0o644, b'''MAJOR={major}
|
||||
MINOR={part_minor}
|
||||
DEVTYPE=partition
|
||||
DEVNAME={devnode}{part_num}
|
||||
''')
|
||||
"""
|
||||
|
||||
if len(sys.argv) != 3:
|
||||
exit("Usage: {} <target dir> <number>".format(sys.argv[0]))
|
||||
|
||||
if not os.path.isdir(sys.argv[1]):
|
||||
exit("Target dir {} not found".format(sys.argv[1]))
|
||||
|
||||
def create_part_sysfs(disk, sd, prt):
|
||||
part = disk
|
||||
part.update ({
|
||||
"part_num": prt,
|
||||
"part_minor": disk["disk_minor"] + prt,
|
||||
})
|
||||
|
||||
try:
|
||||
exec(part_template.format(**part))
|
||||
except OSError:
|
||||
si = sys.exc_info()[1]
|
||||
if (si.errno == errno.EEXIST):
|
||||
print("sysfs structures for %s%d exist" % (sd.namestr(), prt))
|
||||
else:
|
||||
print("error for %s%d: %s" % (sd.namestr(), prt, si[1]))
|
||||
raise
|
||||
else:
|
||||
print("sysfs structures for %s%d created" % (sd.namestr(), prt))
|
||||
|
||||
def create_disk_sysfs(dsk, first_sg, n):
|
||||
sd = MySD(dsk)
|
||||
disk = sd.subst(first_sg)
|
||||
|
||||
try:
|
||||
exec(disk_template.format(**disk))
|
||||
except OSError:
|
||||
si = sys.exc_info()[1]
|
||||
if (si.errno == errno.EEXIST):
|
||||
print("sysfs structures for %s exist" % sd.namestr())
|
||||
elif (si.errno == errno.ENOENT):
|
||||
print("error for %s: %s - have you run sys-script py first?" %
|
||||
(sd.namestr(), si.strerror))
|
||||
return -1
|
||||
else:
|
||||
print("error for %s: %s" % (sd.namestr(), si.strerror))
|
||||
raise
|
||||
else:
|
||||
print("sysfs structures for %s created" % sd.namestr())
|
||||
|
||||
n += 1
|
||||
if n >= last:
|
||||
return n
|
||||
|
||||
for prt in range(1, 16):
|
||||
create_part_sysfs(disk, sd, prt)
|
||||
n += 1
|
||||
if n >= last:
|
||||
return n
|
||||
|
||||
return n
|
||||
|
||||
os.chdir(sys.argv[1])
|
||||
n = 0
|
||||
last = int(sys.argv[2])
|
||||
first_sg = 2
|
||||
for dsk in range(2, 1000):
|
||||
n = create_disk_sysfs(dsk, first_sg, n)
|
||||
if n >= last or n == -1:
|
||||
break
|
|
@ -11677,6 +11677,7 @@ f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:
|
|||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:0/block/sdb/uevent', 0o644, b'''MAJOR=8
|
||||
MINOR=16
|
||||
DEVTYPE=disk
|
||||
DEVNAME=sdb
|
||||
''')
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:0/block/sdb/queue', 0o755)
|
||||
l('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:0/block/sdb/queue/bsg', '../../../bsg/7:0:0:0')
|
||||
|
@ -11709,6 +11710,7 @@ f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:
|
|||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:0/block/sdb/sdb1/uevent', 0o644, b'''MAJOR=8
|
||||
MINOR=17
|
||||
DEVTYPE=partition
|
||||
DEVNAME=sdb1
|
||||
''')
|
||||
d('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:0/block/sdb/sdb1/power', 0o755)
|
||||
f('sys/devices/pci0000:00/0000:00:1d.7/usb5/5-1/5-1:1.0/host7/target7:0:0/7:0:0:0/block/sdb/sdb1/power/wakeup', 0o644, b'\n')
|
||||
|
@ -13150,6 +13152,7 @@ f('sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda10
|
|||
f('sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda10/uevent', 0o644, b'''MAJOR=8
|
||||
MINOR=10
|
||||
DEVTYPE=partition
|
||||
DEVNAME=sda10
|
||||
''')
|
||||
d('sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda10/power', 0o755)
|
||||
f('sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda10/power/wakeup', 0o644, b'\n')
|
||||
|
@ -13163,6 +13166,7 @@ f('sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda9/
|
|||
f('sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda9/uevent', 0o644, b'''MAJOR=8
|
||||
MINOR=9
|
||||
DEVTYPE=partition
|
||||
DEVNAME=sda9
|
||||
''')
|
||||
d('sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda9/holders', 0o755)
|
||||
l('sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda9/holders/md0', '../../../../../../../../../virtual/block/md0')
|
||||
|
@ -13178,6 +13182,7 @@ f('sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda7/
|
|||
f('sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda7/uevent', 0o644, b'''MAJOR=8
|
||||
MINOR=7
|
||||
DEVTYPE=partition
|
||||
DEVNAME=sda7
|
||||
''')
|
||||
d('sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda7/power', 0o755)
|
||||
f('sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda7/power/wakeup', 0o644, b'\n')
|
||||
|
@ -13205,6 +13210,7 @@ f('sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda8/
|
|||
f('sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda8/uevent', 0o644, b'''MAJOR=8
|
||||
MINOR=8
|
||||
DEVTYPE=partition
|
||||
DEVNAME=sda8
|
||||
''')
|
||||
d('sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda8/power', 0o755)
|
||||
f('sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda8/power/wakeup', 0o644, b'\n')
|
||||
|
@ -13232,6 +13238,7 @@ f('sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda6/
|
|||
f('sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda6/uevent', 0o644, b'''MAJOR=8
|
||||
MINOR=6
|
||||
DEVTYPE=partition
|
||||
DEVNAME=sda6
|
||||
''')
|
||||
d('sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda6/power', 0o755)
|
||||
f('sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda6/power/wakeup', 0o644, b'\n')
|
||||
|
|
1912
test/udev-test.pl
1912
test/udev-test.pl
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue