mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
report: query lvmlockd for lv_active_exclusively
Query LV lock state in lvmlockd to report lv_active_exclusively for active LVs in a shared VGs. As with all lvmlockd state, it is from the perspective of the local node. Signed-off-by: corubba <corubba@gmx.de>
This commit is contained in:
parent
779fc3c045
commit
e0ea0706dc
@ -2298,8 +2298,7 @@ int lockd_vg_update(struct volume_group *vg)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _query_lock_lv(struct cmd_context *cmd, struct volume_group *vg,
|
int lockd_query_lv(struct volume_group *vg, const char *lv_name, char *lv_uuid,
|
||||||
const char *lv_name, char *lv_uuid,
|
|
||||||
const char *lock_args, int *ex, int *sh)
|
const char *lock_args, int *ex, int *sh)
|
||||||
{
|
{
|
||||||
daemon_reply reply;
|
daemon_reply reply;
|
||||||
@ -2308,6 +2307,13 @@ static int _query_lock_lv(struct cmd_context *cmd, struct volume_group *vg,
|
|||||||
int result;
|
int result;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
if (!vg_is_shared(vg))
|
||||||
|
return 1;
|
||||||
|
if (!_use_lvmlockd)
|
||||||
|
return 0;
|
||||||
|
if (!_lvmlockd_connected)
|
||||||
|
return 0;
|
||||||
|
|
||||||
log_debug("lockd query LV %s/%s", vg->name, lv_name);
|
log_debug("lockd query LV %s/%s", vg->name, lv_name);
|
||||||
|
|
||||||
reply = _lockd_send("query_lock_lv",
|
reply = _lockd_send("query_lock_lv",
|
||||||
@ -2386,7 +2392,7 @@ int lockd_lv_name(struct cmd_context *cmd, struct volume_group *vg,
|
|||||||
!strcmp(cmd->name, "lvchange") || !strcmp(cmd->name, "lvconvert")) {
|
!strcmp(cmd->name, "lvchange") || !strcmp(cmd->name, "lvconvert")) {
|
||||||
int ex = 0, sh = 0;
|
int ex = 0, sh = 0;
|
||||||
|
|
||||||
if (!_query_lock_lv(cmd, vg, lv_name, lv_uuid, lock_args, &ex, &sh))
|
if (!lockd_query_lv(vg, lv_name, lv_uuid, lock_args, &ex, &sh))
|
||||||
return 1;
|
return 1;
|
||||||
if (sh) {
|
if (sh) {
|
||||||
log_warn("WARNING: shared LV may require refresh on other hosts where it is active.");
|
log_warn("WARNING: shared LV may require refresh on other hosts where it is active.");
|
||||||
|
@ -103,6 +103,9 @@ int lockd_lv_uses_lock(struct logical_volume *lv);
|
|||||||
|
|
||||||
int lockd_lv_refresh(struct cmd_context *cmd, struct lvresize_params *lp);
|
int lockd_lv_refresh(struct cmd_context *cmd, struct lvresize_params *lp);
|
||||||
|
|
||||||
|
int lockd_query_lv(struct volume_group *vg, const char *lv_name, char *lv_uuid,
|
||||||
|
const char *lock_args, int *ex, int *sh);
|
||||||
|
|
||||||
#else /* LVMLOCKD_SUPPORT */
|
#else /* LVMLOCKD_SUPPORT */
|
||||||
|
|
||||||
static inline void lvmlockd_set_socket(const char *sock)
|
static inline void lvmlockd_set_socket(const char *sock)
|
||||||
@ -258,6 +261,12 @@ static inline int lockd_lv_refresh(struct cmd_context *cmd, struct lvresize_para
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int lockd_query_lv(struct volume_group *vg, const char *lv_name,
|
||||||
|
char *lv_uuid, const char *lock_args, int *ex, int *sh)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* LVMLOCKD_SUPPORT */
|
#endif /* LVMLOCKD_SUPPORT */
|
||||||
|
|
||||||
#endif /* _LVMLOCKD_H */
|
#endif /* _LVMLOCKD_H */
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include "lib/cache/lvmcache.h"
|
#include "lib/cache/lvmcache.h"
|
||||||
#include "lib/device/device-types.h"
|
#include "lib/device/device-types.h"
|
||||||
#include "lib/datastruct/str_list.h"
|
#include "lib/datastruct/str_list.h"
|
||||||
|
#include "lib/locking/lvmlockd.h"
|
||||||
|
|
||||||
#include <stddef.h> /* offsetof() */
|
#include <stddef.h> /* offsetof() */
|
||||||
#include <float.h> /* DBL_MAX */
|
#include <float.h> /* DBL_MAX */
|
||||||
@ -3854,13 +3855,20 @@ static int _lvactiveexclusively_disp(struct dm_report *rh, struct dm_pool *mem,
|
|||||||
const void *data, void *private)
|
const void *data, void *private)
|
||||||
{
|
{
|
||||||
const struct logical_volume *lv = (const struct logical_volume *) data;
|
const struct logical_volume *lv = (const struct logical_volume *) data;
|
||||||
int active_exclusively;
|
int active_exclusively, _sh = 0;
|
||||||
|
|
||||||
if (!activation())
|
if (!activation())
|
||||||
return _binary_undef_disp(rh, mem, field, private);
|
return _binary_undef_disp(rh, mem, field, private);
|
||||||
|
|
||||||
active_exclusively = lv_is_active(lv);
|
active_exclusively = lv_is_active(lv);
|
||||||
|
|
||||||
|
if (active_exclusively && vg_is_shared(lv->vg)) {
|
||||||
|
active_exclusively = 0;
|
||||||
|
if (!lockd_query_lv(lv->vg, lv->name, lv_uuid_dup(NULL, lv),
|
||||||
|
lv->lock_args, &active_exclusively, &_sh))
|
||||||
|
return _binary_undef_disp(rh, mem, field, private);
|
||||||
|
}
|
||||||
|
|
||||||
return _binary_disp(rh, mem, field, active_exclusively, GET_FIRST_RESERVED_NAME(lv_active_exclusively_y), private);
|
return _binary_disp(rh, mem, field, active_exclusively, GET_FIRST_RESERVED_NAME(lv_active_exclusively_y), private);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user