diff options
author | Kay Sievers <kay.sievers@suse.de> | 2005-07-05 22:40:42 +0200 |
---|---|---|
committer | Kay Sievers <kay.sievers@suse.de> | 2005-07-05 22:40:42 +0200 |
commit | 25103c4849d3bdee38d22e08c65cd60cf5d5bcc4 (patch) | |
tree | 3ad58616f2c8a35ad96075536ebd7a39b5988dfd /udev_db.c | |
parent | 8bd41f36f793f7fc208ef6beb4b2b84e35a5e728 (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.c | 19 |
1 files changed, 15 insertions, 4 deletions
@@ -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; } |