summaryrefslogtreecommitdiff
path: root/udev_db.c
diff options
context:
space:
mode:
authorKay Sievers <kay.sievers@suse.de>2005-07-05 22:40:42 +0200
committerKay Sievers <kay.sievers@suse.de>2005-07-05 22:40:42 +0200
commit25103c4849d3bdee38d22e08c65cd60cf5d5bcc4 (patch)
tree3ad58616f2c8a35ad96075536ebd7a39b5988dfd /udev_db.c
parent8bd41f36f793f7fc208ef6beb4b2b84e35a5e728 (diff)
create udevdb files only if somehting interesting happened
Device nodes created with the default rule, without any symlink or option are no longer saved to the udevdb. This saves us ~3 MB RAM for pretty much useless files on tmpfs. Note: HAL needs a fix to handle this correctly. It's already available on the list. Signed-off-by: Kay Sievers <kay.sievers@suse.de>
Diffstat (limited to 'udev_db.c')
-rw-r--r--udev_db.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/udev_db.c b/udev_db.c
index 264af79d06..6f10b1e58d 100644
--- a/udev_db.c
+++ b/udev_db.c
@@ -68,10 +68,18 @@ int udev_db_add_device(struct udevice *udev)
if (udev->test_run)
return 0;
- get_db_filename(udev->devpath, filename, sizeof(filename));
+ /* don't write anything if udev created only the node with the
+ * kernel name without any interesting data to remember
+ */
+ if (strcmp(udev->name, udev->kernel_name) == 0 &&
+ list_empty(&udev->symlink_list) && list_empty(&udev->env_list) &&
+ !udev->partitions && !udev->ignore_remove) {
+ dbg("nothing interesting to store in udevdb, skip");
+ goto exit;
+ }
+ get_db_filename(udev->devpath, filename, sizeof(filename));
create_path(filename);
-
f = fopen(filename, "w");
if (f == NULL) {
err("unable to create db file '%s'", filename);
@@ -84,12 +92,15 @@ int udev_db_add_device(struct udevice *udev)
list_for_each_entry(name_loop, &udev->symlink_list, node)
fprintf(f, "S:%s\n", name_loop->name);
fprintf(f, "M:%u:%u\n", major(udev->devt), minor(udev->devt));
- fprintf(f, "A:%u\n", udev->partitions);
- fprintf(f, "R:%u\n", udev->ignore_remove);
+ if (udev->partitions)
+ fprintf(f, "A:%u\n", udev->partitions);
+ if (udev->ignore_remove)
+ fprintf(f, "R:%u\n", udev->ignore_remove);
list_for_each_entry(name_loop, &udev->env_list, node)
fprintf(f, "E:%s\n", name_loop->name);
fclose(f);
+exit:
return 0;
}