mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
Enclosure LED fixes
- Pass $VDEV_ENC_SYSFS_PATH to 'zpool [iostat|status] -c' to include enclosure LED sysfs path. - Set LEDs correctly after import. This includes clearing any erroniously set LEDs prior to the import, and setting the LED for any UNAVAIL drives. - Include symlink for vdev_attach-led.sh in Makefile.am. - Print the VDEV path in all-syslog.sh, and fix it so the pool GUID actually prints. Reviewed-by: Don Brady <don.brady@intel.com> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Tony Hutter <hutter2@llnl.gov> Closes #5716 Closes #5751
This commit is contained in:
committed by
Brian Behlendorf
parent
65a736bc0d
commit
b291029e86
+14
-3
@@ -332,9 +332,11 @@ vdev_run_cmd_thread(void *cb_cmd_data)
|
||||
char cmd[_POSIX_ARG_MAX];
|
||||
|
||||
/* Set our VDEV_PATH and VDEV_UPATH env vars and run command */
|
||||
if (snprintf(cmd, sizeof (cmd), "VDEV_PATH=%s && VDEV_UPATH=%s && %s",
|
||||
data->path, data->upath ? data->upath : "\"\"", data->cmd) >=
|
||||
sizeof (cmd)) {
|
||||
if (snprintf(cmd, sizeof (cmd), "VDEV_PATH=%s && VDEV_UPATH=\"%s\" && "
|
||||
"VDEV_ENC_SYSFS_PATH=\"%s\" && %s", data->path ? data->path : "",
|
||||
data->upath ? data->upath : "",
|
||||
data->vdev_enc_sysfs_path ? data->vdev_enc_sysfs_path : "",
|
||||
data->cmd) >= sizeof (cmd)) {
|
||||
/* Our string was truncated */
|
||||
return;
|
||||
}
|
||||
@@ -364,11 +366,15 @@ for_each_vdev_run_cb(zpool_handle_t *zhp, nvlist_t *nv, void *cb_vcdl)
|
||||
vdev_cmd_data_t *data;
|
||||
char *path = NULL;
|
||||
char *vname = NULL;
|
||||
char *vdev_enc_sysfs_path = NULL;
|
||||
int i, match = 0;
|
||||
|
||||
if (nvlist_lookup_string(nv, ZPOOL_CONFIG_PATH, &path) != 0)
|
||||
return (1);
|
||||
|
||||
nvlist_lookup_string(nv, ZPOOL_CONFIG_VDEV_ENC_SYSFS_PATH,
|
||||
&vdev_enc_sysfs_path);
|
||||
|
||||
/* Spares show more than once if they're in use, so skip if exists */
|
||||
for (i = 0; i < vcdl->count; i++) {
|
||||
if ((strcmp(vcdl->data[i].path, path) == 0) &&
|
||||
@@ -406,6 +412,10 @@ for_each_vdev_run_cb(zpool_handle_t *zhp, nvlist_t *nv, void *cb_vcdl)
|
||||
data->path = strdup(path);
|
||||
data->upath = zfs_get_underlying_path(path);
|
||||
data->cmd = vcdl->cmd;
|
||||
if (vdev_enc_sysfs_path)
|
||||
data->vdev_enc_sysfs_path = strdup(vdev_enc_sysfs_path);
|
||||
else
|
||||
data->vdev_enc_sysfs_path = NULL;
|
||||
|
||||
vcdl->count++;
|
||||
|
||||
@@ -500,6 +510,7 @@ free_vdev_cmd_data_list(vdev_cmd_data_list_t *vcdl)
|
||||
free(vcdl->data[i].pool);
|
||||
free(vcdl->data[i].upath);
|
||||
free(vcdl->data[i].line);
|
||||
free(vcdl->data[i].vdev_enc_sysfs_path);
|
||||
}
|
||||
free(vcdl->data);
|
||||
free(vcdl);
|
||||
|
||||
@@ -80,6 +80,7 @@ typedef struct vdev_cmd_data
|
||||
char *upath; /* vdev underlying path */
|
||||
char *pool; /* Pool name */
|
||||
char *cmd; /* backpointer to cmd */
|
||||
char *vdev_enc_sysfs_path; /* enclosure sysfs path (if any) */
|
||||
} vdev_cmd_data_t;
|
||||
|
||||
typedef struct vdev_cmd_data_list
|
||||
|
||||
Reference in New Issue
Block a user