mirror of
https://github.com/systemd/systemd
synced 2025-09-26 15:24:44 +02:00
Compare commits
No commits in common. "b8aac5014c7dec215bac42007be2ee6ded0d5c56" and "a1b24ee147454390e9d557a94a848f59ca662c82" have entirely different histories.
b8aac5014c
...
a1b24ee147
@ -408,8 +408,7 @@ bool stat_inode_unmodified(const struct stat *a, const struct stat *b) {
|
|||||||
return a && 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 & 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_mode ^ b->st_mode) & S_IFMT) == 0 && /* same inode type */
|
||||||
a->st_mtim.tv_sec == b->st_mtim.tv_sec &&
|
a->st_mtime == b->st_mtime &&
|
||||||
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 */
|
(!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_dev == b->st_dev &&
|
||||||
a->st_ino == b->st_ino &&
|
a->st_ino == b->st_ino &&
|
||||||
|
@ -1710,8 +1710,6 @@ static int socket_open_fds(Socket *_s) {
|
|||||||
_cleanup_free_ char *ep = NULL;
|
_cleanup_free_ char *ep = NULL;
|
||||||
|
|
||||||
ep = path_make_absolute("ep0", p->path);
|
ep = path_make_absolute("ep0", p->path);
|
||||||
if (!ep)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
p->fd = usbffs_address_create(ep);
|
p->fd = usbffs_address_create(ep);
|
||||||
if (p->fd < 0)
|
if (p->fd < 0)
|
||||||
|
@ -581,7 +581,7 @@ const char *bus_error_message(const sd_bus_error *e, int error) {
|
|||||||
return e->message;
|
return e->message;
|
||||||
}
|
}
|
||||||
|
|
||||||
return strerror_safe(error);
|
return strerror_safe(abs(error));
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool map_ok(const sd_bus_error_map *map) {
|
static bool map_ok(const sd_bus_error_map *map) {
|
||||||
|
@ -19,10 +19,7 @@ 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.");
|
return log_device_error_errno(dev, SYNTHETIC_ERRNO(EINVAL), "This program takes no arguments.");
|
||||||
|
|
||||||
r = link_get_driver(ctx, dev, &driver);
|
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);
|
udev_builtin_add_property(dev, test, "ID_NET_DRIVER", driver);
|
||||||
|
|
||||||
r = link_config_get(ctx, dev, &link);
|
r = link_config_get(ctx, dev, &link);
|
||||||
|
@ -1041,13 +1041,6 @@ int udev_event_execute_rules(UdevEvent *event,
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_device_debug_errno(dev, r, "Failed to update database under /run/udev/data/: %m");
|
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);
|
device_set_is_initialized(dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -20,15 +20,12 @@
|
|||||||
#include "path-util.h"
|
#include "path-util.h"
|
||||||
#include "selinux-util.h"
|
#include "selinux-util.h"
|
||||||
#include "smack-util.h"
|
#include "smack-util.h"
|
||||||
#include "stat-util.h"
|
|
||||||
#include "stdio-util.h"
|
#include "stdio-util.h"
|
||||||
#include "string-util.h"
|
#include "string-util.h"
|
||||||
#include "strxcpyx.h"
|
#include "strxcpyx.h"
|
||||||
#include "udev-node.h"
|
#include "udev-node.h"
|
||||||
#include "user-util.h"
|
#include "user-util.h"
|
||||||
|
|
||||||
#define LINK_UPDATE_MAX_RETRIES 128
|
|
||||||
|
|
||||||
static int node_symlink(sd_device *dev, const char *node, const char *slink) {
|
static int node_symlink(sd_device *dev, const char *node, const char *slink) {
|
||||||
_cleanup_free_ char *slink_dirname = NULL, *target = NULL;
|
_cleanup_free_ char *slink_dirname = NULL, *target = NULL;
|
||||||
const char *id_filename, *slink_tmp;
|
const char *id_filename, *slink_tmp;
|
||||||
@ -102,9 +99,7 @@ static int node_symlink(sd_device *dev, const char *node, const char *slink) {
|
|||||||
if (rename(slink_tmp, slink) < 0) {
|
if (rename(slink_tmp, slink) < 0) {
|
||||||
r = log_device_error_errno(dev, errno, "Failed to rename '%s' to '%s': %m", slink_tmp, slink);
|
r = log_device_error_errno(dev, errno, "Failed to rename '%s' to '%s': %m", slink_tmp, slink);
|
||||||
(void) unlink(slink_tmp);
|
(void) unlink(slink_tmp);
|
||||||
} else
|
}
|
||||||
/* Tell caller that we replaced already existing symlink. */
|
|
||||||
r = 1;
|
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
@ -197,7 +192,7 @@ static int link_update(sd_device *dev, const char *slink, bool add) {
|
|||||||
_cleanup_free_ char *target = NULL, *filename = NULL, *dirname = NULL;
|
_cleanup_free_ char *target = NULL, *filename = NULL, *dirname = NULL;
|
||||||
char name_enc[PATH_MAX];
|
char name_enc[PATH_MAX];
|
||||||
const char *id_filename;
|
const char *id_filename;
|
||||||
int i, r, retries;
|
int r;
|
||||||
|
|
||||||
assert(dev);
|
assert(dev);
|
||||||
assert(slink);
|
assert(slink);
|
||||||
@ -217,6 +212,14 @@ static int link_update(sd_device *dev, const char *slink, bool add) {
|
|||||||
if (!add && unlink(filename) == 0)
|
if (!add && unlink(filename) == 0)
|
||||||
(void) rmdir(dirname);
|
(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)
|
if (add)
|
||||||
do {
|
do {
|
||||||
_cleanup_close_ int fd = -1;
|
_cleanup_close_ int fd = -1;
|
||||||
@ -229,49 +232,7 @@ static int link_update(sd_device *dev, const char *slink, bool add) {
|
|||||||
r = -errno;
|
r = -errno;
|
||||||
} while (r == -ENOENT);
|
} while (r == -ENOENT);
|
||||||
|
|
||||||
/* If the database entry is not written yet we will just do one iteration and possibly wrong symlink
|
return r;
|
||||||
* 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) {
|
int udev_node_update_old_links(sd_device *dev, sd_device *dev_old) {
|
||||||
@ -490,11 +451,8 @@ int udev_node_add(sd_device *dev, bool apply,
|
|||||||
(void) node_symlink(dev, devnode, filename);
|
(void) node_symlink(dev, devnode, filename);
|
||||||
|
|
||||||
/* create/update symlinks, add symlinks to name index */
|
/* create/update symlinks, add symlinks to name index */
|
||||||
FOREACH_DEVICE_DEVLINK(dev, devlink) {
|
FOREACH_DEVICE_DEVLINK(dev, devlink)
|
||||||
r = link_update(dev, devlink, true);
|
(void) link_update(dev, devlink, true);
|
||||||
if (r < 0)
|
|
||||||
log_device_info_errno(dev, r, "Failed to update device symlinks: %m");
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -507,11 +465,8 @@ int udev_node_remove(sd_device *dev) {
|
|||||||
assert(dev);
|
assert(dev);
|
||||||
|
|
||||||
/* remove/update symlinks, remove symlinks from name index */
|
/* remove/update symlinks, remove symlinks from name index */
|
||||||
FOREACH_DEVICE_DEVLINK(dev, devlink) {
|
FOREACH_DEVICE_DEVLINK(dev, devlink)
|
||||||
r = link_update(dev, devlink, false);
|
(void) 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);
|
r = xsprintf_dev_num_path_from_sd_device(dev, &filename);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
|
@ -1,342 +0,0 @@
|
|||||||
#!/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,7 +11677,6 @@ 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
|
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
|
MINOR=16
|
||||||
DEVTYPE=disk
|
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)
|
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')
|
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')
|
||||||
@ -11710,7 +11709,6 @@ 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
|
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
|
MINOR=17
|
||||||
DEVTYPE=partition
|
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)
|
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')
|
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')
|
||||||
@ -13152,7 +13150,6 @@ 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
|
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
|
MINOR=10
|
||||||
DEVTYPE=partition
|
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)
|
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')
|
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')
|
||||||
@ -13166,7 +13163,6 @@ 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
|
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
|
MINOR=9
|
||||||
DEVTYPE=partition
|
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)
|
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')
|
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')
|
||||||
@ -13182,7 +13178,6 @@ 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
|
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
|
MINOR=7
|
||||||
DEVTYPE=partition
|
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)
|
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')
|
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')
|
||||||
@ -13210,7 +13205,6 @@ 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
|
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
|
MINOR=8
|
||||||
DEVTYPE=partition
|
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)
|
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')
|
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')
|
||||||
@ -13238,7 +13232,6 @@ 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
|
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
|
MINOR=6
|
||||||
DEVTYPE=partition
|
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)
|
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')
|
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')
|
||||||
|
1492
test/udev-test.pl
1492
test/udev-test.pl
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user