public inbox for lvm2-cvs@sourceware.org help / color / mirror / Atom feed
From: agk@sourceware.org To: lvm-devel@redhat.com, lvm2-cvs@sourceware.org Subject: LVM2 ./WHATS_NEW doc/example.conf lib/activate ... Date: Thu, 25 Jan 2007 21:22:00 -0000 [thread overview] Message-ID: <20070125212231.13385.qmail@sourceware.org> (raw) CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2007-01-25 21:22:30 Modified files: . : WHATS_NEW doc : example.conf lib/activate : activate.h dev_manager.c lib/commands : toolcontext.c lib/config : defaults.h lib/filters : filter.c lib/log : log.c log.h Log message: Add devices/ignore_suspended_devices to ignore suspended dm devices. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.558&r2=1.559 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/doc/example.conf.diff?cvsroot=lvm2&r1=1.27&r2=1.28 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/activate.h.diff?cvsroot=lvm2&r1=1.53&r2=1.54 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/activate/dev_manager.c.diff?cvsroot=lvm2&r1=1.118&r2=1.119 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/commands/toolcontext.c.diff?cvsroot=lvm2&r1=1.46&r2=1.47 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/config/defaults.h.diff?cvsroot=lvm2&r1=1.29&r2=1.30 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/filters/filter.c.diff?cvsroot=lvm2&r1=1.37&r2=1.38 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/log/log.c.diff?cvsroot=lvm2&r1=1.37&r2=1.38 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/log/log.h.diff?cvsroot=lvm2&r1=1.34&r2=1.35 --- LVM2/WHATS_NEW 2007/01/25 14:37:46 1.558 +++ LVM2/WHATS_NEW 2007/01/25 21:22:29 1.559 @@ -1,5 +1,6 @@ Version 2.02.20 - =================================== + Add devices/ignore_suspended_devices to ignore suspended dm devices. Add some missing close() and fclose() return code checks. Fix exit statuses of reporting tools (2.02.19). Add init script for dmeventd monitoring. --- LVM2/doc/example.conf 2006/09/02 01:18:17 1.27 +++ LVM2/doc/example.conf 2007/01/25 21:22:30 1.28 @@ -79,6 +79,12 @@ # software RAID (md) devices by looking for md superblocks. # 1 enables; 0 disables. md_component_detection = 1 + + # If, while scanning the system for PVs, LVM2 encounters a device-mapper + # device that has its I/O suspended, it waits for it to become accessible. + # Set this to 1 to skip such devices. This should only be needed + # in recovery situations. + ignore_suspended_devices = 0 } # This section that allows you to configure the nature of the --- LVM2/lib/activate/activate.h 2007/01/19 22:21:45 1.53 +++ LVM2/lib/activate/activate.h 2007/01/25 21:22:30 1.54 @@ -95,4 +95,9 @@ int pv_uses_vg(struct physical_volume *pv, struct volume_group *vg); +/* + * Returns 1 if mapped device is not suspended. + */ +int device_is_usable(dev_t dev); + #endif --- LVM2/lib/activate/dev_manager.c 2007/01/09 20:31:08 1.118 +++ LVM2/lib/activate/dev_manager.c 2007/01/25 21:22:30 1.119 @@ -25,6 +25,7 @@ #include "targets.h" #include "config.h" #include "filter.h" +#include "activate.h" #include <limits.h> #include <dirent.h> @@ -154,6 +155,42 @@ return r; } +int device_is_usable(dev_t dev) +{ + struct dm_task *dmt; + struct dm_info info; + int r = 0; + + if (!(dmt = dm_task_create(DM_DEVICE_INFO))) { + log_error("Failed to allocate dm_task struct to check dev status"); + return 0; + } + + if (!dm_task_set_major(dmt, MAJOR(dev)) || !dm_task_set_minor(dmt, MINOR(dev))) + goto_out; + + if (!dm_task_run(dmt)) { + log_error("Failed to get state of mapped device"); + goto out; + } + + if (!dm_task_get_info(dmt, &info)) + goto_out; + + if (!info.exists || info.suspended) + goto out; + + /* FIXME Also check for mirror block_on_error and mpath no paths */ + + /* FIXME Also check dependencies? */ + + r = 1; + + out: + dm_task_destroy(dmt); + return r; +} + static int _info(const char *name, const char *dlid, int mknodes, int with_open_count, struct dm_info *info, struct dm_pool *mem, char **uuid_out) --- LVM2/lib/commands/toolcontext.c 2007/01/25 14:37:47 1.46 +++ LVM2/lib/commands/toolcontext.c 2007/01/25 21:22:30 1.47 @@ -592,6 +592,9 @@ return 0; } + init_ignore_suspended_devices(find_config_tree_int(cmd, + "devices/ignore_suspended_devices", DEFAULT_IGNORE_SUSPENDED_DEVICES)); + dev_cache = find_config_tree_str(cmd, "devices/cache", cache_file); if (!(f4 = persistent_filter_create(f3, dev_cache))) { --- LVM2/lib/config/defaults.h 2006/09/02 01:18:17 1.29 +++ LVM2/lib/config/defaults.h 2007/01/25 21:22:30 1.30 @@ -30,6 +30,7 @@ #define DEFAULT_PROC_DIR "/proc" #define DEFAULT_SYSFS_SCAN 1 #define DEFAULT_MD_COMPONENT_DETECTION 1 +#define DEFAULT_IGNORE_SUSPENDED_DEVICES 1 #define DEFAULT_LOCK_DIR "/var/lock/lvm" #define DEFAULT_LOCKING_LIB "liblvm2clusterlock.so" --- LVM2/lib/filters/filter.c 2007/01/25 14:37:47 1.37 +++ LVM2/lib/filters/filter.c 2007/01/25 21:22:30 1.38 @@ -19,6 +19,7 @@ #include "lvm-string.h" #include "config.h" #include "metadata.h" +#include "activate.h" #include <dirent.h> #include <unistd.h> @@ -37,6 +38,7 @@ } device_info_t; static int _md_major = -1; +static int _device_mapper_major = -1; int md_major(void) { @@ -90,6 +92,13 @@ return 0; } + /* Skip suspended devices */ + if (MAJOR(dev->dev) == _device_mapper_major && + ignore_suspended_devices() && device_is_usable(dev->dev)) { + log_debug("%s: Skipping: Suspended dm device", name); + return 0; + } + /* Check it's accessible */ if (!dev_open_flags(dev, O_RDONLY, 0, 1)) { log_debug("%s: Skipping: open failed", name); @@ -182,10 +191,14 @@ if (!strncmp("md", line + i, 2) && isspace(*(line + i + 2))) _md_major = line_maj; + /* Look for device-mapper device */ + /* FIXME Cope with multiple majors */ + if (!strncmp("device-mapper", line + i, 13) && isspace(*(line + i + 13))) + _device_mapper_major = line_maj; + /* Go through the valid device names and if there is a match store max number of partitions */ for (j = 0; device_info[j].name != NULL; j++) { - dev_len = strlen(device_info[j].name); if (dev_len <= strlen(line + i) && !strncmp(device_info[j].name, line + i, dev_len) && --- LVM2/lib/log/log.c 2007/01/25 14:37:48 1.37 +++ LVM2/lib/log/log.c 2007/01/25 21:22:30 1.38 @@ -49,6 +49,7 @@ static int _already_logging = 0; static int _mirror_in_sync = 0; static int _dmeventd_monitor = DEFAULT_DMEVENTD_MONITOR; +static int _ignore_suspended_devices = 0; static lvm2_log_fn_t _lvm2_log_fn = NULL; @@ -195,6 +196,11 @@ _dmeventd_monitor = reg; } +void init_ignore_suspended_devices(int ignore) +{ + _ignore_suspended_devices = ignore; +} + void init_cmd_name(int status) { _log_cmd_name = status; @@ -274,6 +280,11 @@ return _dmeventd_monitor; } +int ignore_suspended_devices(void) +{ + return _ignore_suspended_devices; +} + void init_debug(int level) { _debug_level = level; --- LVM2/lib/log/log.h 2007/01/24 23:43:27 1.34 +++ LVM2/lib/log/log.h 2007/01/25 21:22:30 1.35 @@ -76,6 +76,7 @@ void init_security_level(int level); void init_mirror_in_sync(int in_sync); void init_dmeventd_monitor(int reg); +void init_ignore_suspended_devices(int ignore); void set_cmd_name(const char *cmd_name); @@ -90,6 +91,7 @@ int lockingfailed(void); int security_level(void); int mirror_in_sync(void); +int ignore_suspended_devices(void); #define DMEVENTD_MONITOR_IGNORE -1 int dmeventd_monitor_mode(void);
next reply other threads:[~2007-01-25 21:22 UTC|newest] Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top 2007-01-25 21:22 agk [this message] -- strict thread matches above, loose matches on Subject: below -- 2010-03-05 14:48 zkabelac 2009-08-04 15:36 agk 2007-04-26 16:45 agk 2006-05-11 17:58 agk
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20070125212231.13385.qmail@sourceware.org \ --to=agk@sourceware.org \ --cc=lvm-devel@redhat.com \ --cc=lvm2-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).