Subject: iprutils: Eliminate libsysfs dependency
libsysfs is unmaintained and just adds an oerhead for very little gain. So implement the core functions ourselves and drop libsysfs. Signed-off-by: Hannes Reinecke <hare@suse.de>
This commit is contained in:
parent
5c95aafd64
commit
96923605ff
5 changed files with 426 additions and 605 deletions
12
Makefile
12
Makefile
|
|
@ -16,22 +16,22 @@ TAR = cd .. && tar -zcpf iprutils-$(UTILS_VER)-src.tgz --exclude CVS --exclude a
|
|||
all: iprconfig iprupdate iprdump iprinit iprdbg docs
|
||||
|
||||
iprconfig: iprconfig.c iprlib.o iprconfig.h
|
||||
$(CC) $(CFLAGS) $(INCLUDEDIR) -o iprconfig iprconfig.c iprlib.o -lform -lpanel -lncurses -lmenu -lsysfs
|
||||
$(CC) $(CFLAGS) $(INCLUDEDIR) -o iprconfig iprconfig.c iprlib.o -lform -lpanel -lncurses -lmenu
|
||||
|
||||
iprupdate: iprupdate.c iprlib.o
|
||||
$(CC) $(CFLAGS) $(INCLUDEDIR) -o iprupdate iprlib.o iprupdate.c -lsysfs
|
||||
$(CC) $(CFLAGS) $(INCLUDEDIR) -o iprupdate iprlib.o iprupdate.c
|
||||
|
||||
iprdump:iprdump.c iprlib.o
|
||||
$(CC) $(CFLAGS) $(INCLUDEDIR) -o iprdump iprlib.o iprdump.c -lsysfs
|
||||
$(CC) $(CFLAGS) $(INCLUDEDIR) -o iprdump iprlib.o iprdump.c
|
||||
|
||||
iprinit:iprinit.c iprlib.o
|
||||
$(CC) $(CFLAGS) $(INCLUDEDIR) -o iprinit iprlib.o iprinit.c -lsysfs
|
||||
$(CC) $(CFLAGS) $(INCLUDEDIR) -o iprinit iprlib.o iprinit.c
|
||||
|
||||
iprdbg:iprdbg.c iprlib.o
|
||||
$(CC) $(CFLAGS) $(INCLUDEDIR) -o iprdbg iprlib.o iprdbg.c -lsysfs
|
||||
$(CC) $(CFLAGS) $(INCLUDEDIR) -o iprdbg iprlib.o iprdbg.c
|
||||
|
||||
iprucode:iprucode.c iprlib.o
|
||||
$(CC) $(CFLAGS) $(INCLUDEDIR) -o iprucode iprlib.o iprucode.c -lsysfs
|
||||
$(CC) $(CFLAGS) $(INCLUDEDIR) -o iprucode iprlib.o iprucode.c
|
||||
|
||||
iprlib.o: iprlib.c iprlib.h
|
||||
$(CC) $(CFLAGS) $(INCLUDEDIR) -o iprlib.o -c iprlib.c
|
||||
|
|
|
|||
68
iprconfig.c
68
iprconfig.c
|
|
@ -7097,9 +7097,6 @@ static void wait_for_new_dev_64bit(struct ipr_ioa *ioa, struct ipr_res_path *res
|
|||
struct ipr_dev *dev;
|
||||
struct ipr_res_path_aliases aliases;
|
||||
struct ipr_res_path *rp;
|
||||
struct sysfs_class_device *class_device;
|
||||
struct sysfs_attribute *attr;
|
||||
char *buf = "0 - -";
|
||||
|
||||
ipr_query_res_path_aliases(ioa, res_path, &aliases);
|
||||
if (aliases.length < (4 + 2 * sizeof(struct ipr_res_path))) {
|
||||
|
|
@ -7107,10 +7104,7 @@ static void wait_for_new_dev_64bit(struct ipr_ioa *ioa, struct ipr_res_path *res
|
|||
memcpy(&aliases.res_path[0], res_path, 2 * sizeof(struct ipr_res_path));
|
||||
}
|
||||
|
||||
class_device = sysfs_open_class_device("scsi_host", ioa->host_name);
|
||||
attr = sysfs_get_classdev_attr(class_device, "scan");
|
||||
sysfs_write_attribute(attr, buf, strlen(buf));
|
||||
sysfs_close_class_device(class_device);
|
||||
ipr_scan(ioa, 0, -1, -1);
|
||||
|
||||
while (time--) {
|
||||
check_current_config(false);
|
||||
|
|
@ -7155,7 +7149,8 @@ int remove_or_add_back_device_64bit(struct ipr_dev *dev)
|
|||
res_path_len = strlen(dev->res_path_name);
|
||||
dev_slot = strtoul(dev->res_path_name + (res_path_len - 2), NULL, 16);
|
||||
|
||||
if (!ipr_read_dev_attr(dev, "resource_path", new_sysfs_res_path))
|
||||
if (!ipr_read_dev_attr(dev, "resource_path",
|
||||
new_sysfs_res_path, IPR_MAX_RES_PATH_LEN))
|
||||
if (strncmp(dev->res_path_name, new_sysfs_res_path, sizeof(dev->res_path_name)))
|
||||
for_each_dev(dev->ioa, tmp_dev)
|
||||
if (!strncmp(tmp_dev->res_path_name, new_sysfs_res_path, sizeof(tmp_dev->res_path_name))) {
|
||||
|
|
@ -8494,7 +8489,8 @@ static int dev_init_complete(u8 num_devs)
|
|||
if (!dev->do_init || dev->done)
|
||||
continue;
|
||||
|
||||
if (ipr_read_dev_attr(dev->dev, "type", dev_type)) {
|
||||
if (ipr_read_dev_attr(dev->dev, "type",
|
||||
dev_type, 100)) {
|
||||
dev->done = 1;
|
||||
continue;
|
||||
}
|
||||
|
|
@ -10421,23 +10417,13 @@ int driver_config(i_container *i_con)
|
|||
**/
|
||||
int get_log_level(struct ipr_ioa *ioa)
|
||||
{
|
||||
struct sysfs_class_device *class_device;
|
||||
struct sysfs_attribute *attr;
|
||||
char value_str[100];
|
||||
int value;
|
||||
|
||||
class_device = sysfs_open_class_device("scsi_host",
|
||||
ioa->host_name);
|
||||
if (!class_device)
|
||||
if (ipr_read_host_attr(ioa, "log_level", value_str, 100) < 0)
|
||||
return 0;
|
||||
|
||||
attr = sysfs_get_classdev_attr(class_device,
|
||||
"log_level");
|
||||
if (!attr)
|
||||
return 0;
|
||||
|
||||
sscanf(attr->value, "%d", &value);
|
||||
sysfs_close_class_device(class_device);
|
||||
|
||||
sscanf(value_str, "%d", &value);
|
||||
return value;
|
||||
}
|
||||
|
||||
|
|
@ -10451,21 +10437,8 @@ int get_log_level(struct ipr_ioa *ioa)
|
|||
**/
|
||||
void set_log_level(struct ipr_ioa *ioa, char *log_level)
|
||||
{
|
||||
struct sysfs_class_device *class_device;
|
||||
struct sysfs_attribute *attr;
|
||||
|
||||
class_device = sysfs_open_class_device("scsi_host",
|
||||
ioa->host_name);
|
||||
if (!class_device)
|
||||
return;
|
||||
|
||||
attr = sysfs_get_classdev_attr(class_device,
|
||||
"log_level");
|
||||
if (!attr)
|
||||
return;
|
||||
|
||||
sysfs_write_attribute(attr, log_level, 2);
|
||||
sysfs_close_class_device(class_device);
|
||||
ipr_write_host_attr(ioa, "log_level", log_level,
|
||||
strlen(log_level));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -14238,9 +14211,11 @@ static struct ipr_dev *find_slot(struct ipr_dev **devs, int num_devs, char *slot
|
|||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < num_devs; i++)
|
||||
for (i = 0; i < num_devs; i++) {
|
||||
syslog_dbg("Looking for slot %s at pos %d\n", slot, i);
|
||||
if (!strncmp(devs[i]->physical_location, slot, strlen(slot)))
|
||||
return devs[i];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -16440,6 +16415,8 @@ static int show_ioas(char **args, int num_args)
|
|||
|
||||
if (num_ioas)
|
||||
printf("%s\n%s\n", status_hdr[2], status_sep[2]);
|
||||
else
|
||||
printf("No IOAs found\n");
|
||||
for_each_ioa(ioa)
|
||||
printf_device(&ioa->ioa, 2);
|
||||
|
||||
|
|
@ -17652,18 +17629,19 @@ static int non_interactive_cmd(char *cmd, char **args, int num_args)
|
|||
|
||||
int check_sg_module()
|
||||
{
|
||||
struct sysfs_attribute *sysfs_attr;
|
||||
char path[SYSFS_PATH_MAX];
|
||||
DIR *sg_dirfd;
|
||||
char devpath[PATH_MAX];
|
||||
|
||||
sprintf(path, "%s", "/sys/module/sg");
|
||||
sprintf(devpath, "%s", "/sys/module/sg");
|
||||
|
||||
sysfs_attr = sysfs_open_attribute(path);
|
||||
if (!sysfs_attr) {
|
||||
syslog_dbg("Failed to open sg parameter.\n");
|
||||
sg_dirfd = opendir(devpath);
|
||||
|
||||
if (!sg_dirfd) {
|
||||
exit_on_error("Failed to open sg parameter.\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
sysfs_close_attribute(sysfs_attr);
|
||||
closedir(sg_dirfd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
91
iprdump.c
91
iprdump.c
|
|
@ -61,41 +61,13 @@ static char *disable = "0\n";
|
|||
**/
|
||||
static void enable_dump(struct ipr_ioa *ioa)
|
||||
{
|
||||
struct sysfs_class_device *class_device;
|
||||
struct sysfs_attribute *attr;
|
||||
int rc, fd;
|
||||
int rc;
|
||||
|
||||
class_device = sysfs_open_class_device("scsi_host", ioa->host_name);
|
||||
if (!class_device) {
|
||||
ioa_err(ioa, "Failed to open class device. %m\n");
|
||||
return;
|
||||
}
|
||||
|
||||
attr = sysfs_get_classdev_attr(class_device, "dump");
|
||||
if (!attr) {
|
||||
ioa_dbg(ioa, "Failed to get class attribute. %m\n");
|
||||
sysfs_close_class_device(class_device);
|
||||
return;
|
||||
}
|
||||
|
||||
fd = open(attr->path, O_RDWR);
|
||||
if (fd < 0) {
|
||||
if (errno != ENOENT)
|
||||
ioa_err(ioa, "Failed to open dump attribute. %m\n");
|
||||
sysfs_close_class_device(class_device);
|
||||
return;
|
||||
}
|
||||
|
||||
rc = write(fd, enable, strlen(enable));
|
||||
rc = ipr_write_host_attr(ioa, "dump", enable, strlen(enable));
|
||||
if (rc != strlen(enable)) {
|
||||
ioa_err(ioa, "Failed to enable dump. rc=%d. %m\n", rc);
|
||||
close(fd);
|
||||
sysfs_close_class_device(class_device);
|
||||
return;
|
||||
}
|
||||
|
||||
close(fd);
|
||||
sysfs_close_class_device(class_device);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -107,38 +79,13 @@ static void enable_dump(struct ipr_ioa *ioa)
|
|||
**/
|
||||
static void disable_dump(struct ipr_ioa *ioa)
|
||||
{
|
||||
struct sysfs_class_device *class_device;
|
||||
struct sysfs_attribute *attr;
|
||||
int rc, fd;
|
||||
int rc;
|
||||
|
||||
class_device = sysfs_open_class_device("scsi_host", ioa->host_name);
|
||||
if (!class_device) {
|
||||
ioa_err(ioa, "Failed to open class device. %m\n");
|
||||
return;
|
||||
}
|
||||
|
||||
attr = sysfs_get_classdev_attr(class_device, "dump");
|
||||
if (!attr) {
|
||||
ioa_dbg(ioa, "Failed to get class attribute. %m\n");
|
||||
sysfs_close_class_device(class_device);
|
||||
return;
|
||||
}
|
||||
|
||||
fd = open(attr->path, O_RDWR);
|
||||
if (fd < 0) {
|
||||
ioa_err(ioa, "Failed to open dump attribute. %m\n");
|
||||
sysfs_close_class_device(class_device);
|
||||
return;
|
||||
}
|
||||
|
||||
rc = write(fd, disable, strlen(disable));
|
||||
rc = ipr_write_host_attr(ioa, "dump", disable, strlen(disable));
|
||||
if (rc != strlen(disable)) {
|
||||
ioa_err(ioa, "Failed to disable dump. rc=%d. %m\n", rc);
|
||||
sysfs_close_class_device(class_device);
|
||||
return;
|
||||
}
|
||||
|
||||
sysfs_close_class_device(class_device);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -150,36 +97,10 @@ static void disable_dump(struct ipr_ioa *ioa)
|
|||
**/
|
||||
static int read_dump(struct ipr_ioa *ioa)
|
||||
{
|
||||
struct sysfs_class_device *class_device;
|
||||
struct sysfs_attribute *attr;
|
||||
int count = 0;
|
||||
FILE *file;
|
||||
|
||||
class_device = sysfs_open_class_device("scsi_host", ioa->host_name);
|
||||
if (!class_device) {
|
||||
ioa_err(ioa, "Failed to open class device. %m\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
attr = sysfs_get_classdev_attr(class_device, "dump");
|
||||
if (!attr) {
|
||||
ioa_dbg(ioa, "Failed to open dump attribute. %m\n");
|
||||
sysfs_close_class_device(class_device);
|
||||
return -EIO;
|
||||
|
||||
}
|
||||
|
||||
file = fopen(attr->path, "r");
|
||||
if (!file) {
|
||||
ioa_err(ioa, "Failed to open sysfs dump file. %m\n");
|
||||
sysfs_close_class_device(class_device);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
count = fread(&dump, 1, sizeof(dump), file);
|
||||
fclose(file);
|
||||
sysfs_close_class_device(class_device);
|
||||
return count;
|
||||
count = ipr_read_host_attr(ioa, "dump", &dump, sizeof(dump));
|
||||
return (count < 0) ? 0: count;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
10
iprlib.h
10
iprlib.h
|
|
@ -16,6 +16,7 @@
|
|||
*/
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
|
|
@ -42,7 +43,6 @@
|
|||
#include <pci/pci.h>
|
||||
#include <stdbool.h>
|
||||
#include <netinet/in.h>
|
||||
#include <sysfs/libsysfs.h>
|
||||
#include <asm/byteorder.h>
|
||||
#include <sys/mman.h>
|
||||
#include <paths.h>
|
||||
|
|
@ -265,7 +265,7 @@ extern struct sysfs_dev *head_zdev;
|
|||
extern struct sysfs_dev *tail_zdev;
|
||||
|
||||
struct sysfs_dev {
|
||||
char sysfs_device_name[SYSFS_NAME_LEN];
|
||||
char sysfs_device_name[PATH_MAX];
|
||||
struct sysfs_dev *next, *prev;
|
||||
};
|
||||
|
||||
|
|
@ -1212,7 +1212,7 @@ struct scsi_dev_data {
|
|||
u32 handle;
|
||||
char vendor_id[IPR_VENDOR_ID_LEN + 1];
|
||||
char product_id[IPR_PROD_ID_LEN + 1];
|
||||
char sysfs_device_name[SYSFS_NAME_LEN];
|
||||
char sysfs_device_name[PATH_MAX];
|
||||
char dev_name[64];
|
||||
char gen_name[64];
|
||||
#define IPR_MAX_RES_PATH_LEN 24
|
||||
|
|
@ -2523,7 +2523,9 @@ void ipr_convert_res_path_to_bytes(struct ipr_dev *);
|
|||
void ipr_format_res_path(u8 *, char *, int);
|
||||
void ipr_reset_adapter(struct ipr_ioa *);
|
||||
void ipr_scan(struct ipr_ioa *, int, int, int);
|
||||
int ipr_read_dev_attr(struct ipr_dev *, char *, char *);
|
||||
int ipr_read_host_attr(struct ipr_ioa *, char *, void *, size_t);
|
||||
int ipr_write_host_attr(struct ipr_ioa *, char *, void *, size_t);
|
||||
int ipr_read_dev_attr(struct ipr_dev *, char *, char *, size_t);
|
||||
int ipr_write_dev_attr(struct ipr_dev *, char *, char *);
|
||||
int ipr_suspend_device_bus(struct ipr_dev *, struct ipr_res_addr *, u8);
|
||||
int ipr_resume_device_bus(struct ipr_dev *, struct ipr_res_addr *);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue