From: Lennart Poettering Date: Sun, 21 Aug 2011 18:20:41 +0000 (+0200) Subject: readahead: make use of block_get_whole_disk() where applicable X-Git-Tag: v34~22 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b4454c5edfab70fd1c6a0ea6836a0c2ddb61ef25;p=systemd readahead: make use of block_get_whole_disk() where applicable --- diff --git a/src/readahead-common.c b/src/readahead-common.c index f0d57b4c..67214ec3 100644 --- a/src/readahead-common.c +++ b/src/readahead-common.c @@ -212,12 +212,10 @@ finish: int bump_request_nr(const char *p) { struct stat st; - struct udev *udev = NULL; - struct udev_device *udev_device = NULL, *look_at = NULL; - const char *nr_requests; uint64_t u; - char nr[64], *ap = NULL; + char *ap = NULL, *line = NULL; int r; + dev_t d; assert(p); @@ -227,54 +225,45 @@ int bump_request_nr(const char *p) { if (major(st.st_dev) == 0) return 0; - if (!(udev = udev_new())) - return -ENOMEM; + d = st.st_dev; + block_get_whole_disk(d, &d); - if (!(udev_device = udev_device_new_from_devnum(udev, 'b', st.st_dev))) { - r = -ENOENT; + if (asprintf(&ap, "/sys/dev/block/%u:%u/queue/nr_requests", major(d), minor(d)) < 0) { + r= -ENOMEM; goto finish; } - look_at = udev_device; - if (!(nr_requests = udev_device_get_sysattr_value(look_at, "queue/nr_requests"))) { - - /* Hmm, if the block device doesn't have a queue - * subdir, the let's look in the parent */ - look_at = udev_device_get_parent(udev_device); - nr_requests = udev_device_get_sysattr_value(look_at, "queue/nr_requests"); - } - - if (!nr_requests) { - r = -ENOENT; + r = read_one_line_file(ap, &line); + if (r < 0) { + if (r == -ENOENT) + r = 0; goto finish; } - if (safe_atou64(nr_requests, &u) >= 0 && u >= BUMP_REQUEST_NR) { + r = safe_atou64(line, &u); + if (r >= 0 && u >= BUMP_REQUEST_NR) { r = 0; goto finish; } - if (asprintf(&ap, "%s/queue/nr_requests", udev_device_get_syspath(look_at)) < 0) { + free(line); + line = NULL; + + if (asprintf(&line, "%lu", (unsigned long) BUMP_REQUEST_NR) < 0) { r = -ENOMEM; goto finish; } - snprintf(nr, sizeof(nr), "%lu", (unsigned long) BUMP_REQUEST_NR); - - if ((r = write_one_line_file(ap, nr)) < 0) + r = write_one_line_file(ap, line); + if (r < 0) goto finish; - log_info("Bumped block_nr parameter of %s to %lu. This is a temporary hack and should be removed one day.", udev_device_get_devnode(look_at), (unsigned long) BUMP_REQUEST_NR); + log_info("Bumped block_nr parameter of %u:%u to %lu. This is a temporary hack and should be removed one day.", major(d), minor(d), (unsigned long) BUMP_REQUEST_NR); r = 1; finish: - if (udev_device) - udev_device_unref(udev_device); - - if (udev) - udev_unref(udev); - free(ap); + free(line); return r; }