mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
66daedc6d2
expands commit d5a06f9a7d
"pvscan: skip indexing devices used by LVs"
The dev cache index is expensive and slow, so limit it
to commands that are used to observe the state of lvm.
The index is only used to print warnings about incorrect
device use by active LVs, e.g. if an LV is using a
multipath component device instead of the multipath
device. Commands that continue to use the index and
print the warnings:
fullreport, lvmdiskscan, vgs, lvs, pvs,
vgdisplay, lvdisplay, pvdisplay,
vgscan, lvscan, pvscan (excluding --cache)
A couple other commands were borrowing the DEV_USED_FOR_LV
flag to just check if a device was actively in use by LVs.
These are converted to the new dev_is_used_by_active_lv().
83 lines
2.6 KiB
C
83 lines
2.6 KiB
C
/*
|
|
* Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
|
|
* Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved.
|
|
*
|
|
* This file is part of LVM2.
|
|
*
|
|
* This copyrighted material is made available to anyone wishing to use,
|
|
* modify, copy, or redistribute it subject to the terms and conditions
|
|
* of the GNU Lesser General Public License v.2.1.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#ifndef _LVM_DEV_CACHE_H
|
|
#define _LVM_DEV_CACHE_H
|
|
|
|
#include "lib/device/device.h"
|
|
#include "lib/device/dev-type.h"
|
|
#include "lib/misc/lvm-wrappers.h"
|
|
|
|
struct cmd_context;
|
|
|
|
/*
|
|
* predicate for devices.
|
|
*/
|
|
struct dev_filter {
|
|
int (*passes_filter) (struct cmd_context *cmd, struct dev_filter *f, struct device *dev, const char *use_filter_name);
|
|
void (*destroy) (struct dev_filter *f);
|
|
void (*wipe) (struct cmd_context *cmd, struct dev_filter *f, struct device *dev, const char *use_filter_name);
|
|
void *private;
|
|
unsigned use_count;
|
|
const char *name;
|
|
};
|
|
|
|
struct dm_list *dev_cache_get_dev_list_for_vgid(const char *vgid);
|
|
struct dm_list *dev_cache_get_dev_list_for_lvid(const char *lvid);
|
|
|
|
/*
|
|
* The global device cache.
|
|
*/
|
|
int dev_cache_init(struct cmd_context *cmd);
|
|
int dev_cache_exit(void);
|
|
|
|
/*
|
|
* Returns number of open devices.
|
|
*/
|
|
int dev_cache_check_for_open_devices(void);
|
|
|
|
void dev_cache_scan(struct cmd_context *cmd);
|
|
int dev_cache_has_scanned(void);
|
|
|
|
int dev_cache_add_dir(const char *path);
|
|
struct device *dev_cache_get(struct cmd_context *cmd, const char *name, struct dev_filter *f);
|
|
|
|
struct device *dev_cache_get_by_devt(struct cmd_context *cmd, dev_t device, struct dev_filter *f, int *filtered);
|
|
|
|
struct device *dev_hash_get(const char *name);
|
|
|
|
void dev_set_preferred_name(struct dm_str_list *sl, struct device *dev);
|
|
|
|
/*
|
|
* Object for iterating through the cache.
|
|
*/
|
|
struct dev_iter;
|
|
struct dev_iter *dev_iter_create(struct dev_filter *f, int unused);
|
|
void dev_iter_destroy(struct dev_iter *iter);
|
|
struct device *dev_iter_get(struct cmd_context *cmd, struct dev_iter *iter);
|
|
|
|
void dev_cache_failed_path(struct device *dev, const char *path);
|
|
|
|
bool dev_cache_has_md_with_end_superblock(struct dev_types *dt);
|
|
|
|
int get_sysfs_value(const char *path, char *buf, size_t buf_size, int error_if_no_value);
|
|
int get_dm_uuid_from_sysfs(char *buf, size_t buf_size, int major, int minor);
|
|
|
|
int setup_devices_file(struct cmd_context *cmd);
|
|
int setup_devices(struct cmd_context *cmd);
|
|
int setup_device(struct cmd_context *cmd, const char *devname);
|
|
|
|
#endif
|