Make camcontrol hpa and camcontrol ama trigger reprobe.

This makes OS automatically see the disk's new disk size.

MFC after:	2 weeks
Sponsored by:	iXsystems, Inc.
This commit is contained in:
Alexander Motin 2019-07-23 19:42:03 +00:00
parent 88880fd4cf
commit 0642bc1cbb

View File

@ -301,6 +301,7 @@ static int scsiserial(struct cam_device *device, int task_attr,
int retry_count, int timeout);
static int parse_btl(char *tstr, path_id_t *bus, target_id_t *target,
lun_id_t *lun, cam_argmask *arglst);
static int reprobe(struct cam_device *device);
static int dorescan_or_reset(int argc, char **argv, int rescan);
static int rescan_or_reset_bus(path_id_t bus, int rescan);
static int scanlun_or_reset_dev(path_id_t bus, target_id_t target,
@ -371,7 +372,6 @@ static int scsiprintopcodes(struct cam_device *device, int td_req, uint8_t *buf,
static int scsiopcodes(struct cam_device *device, int argc, char **argv,
char *combinedopt, int task_attr, int retry_count,
int timeout, int verbose);
static int scsireprobe(struct cam_device *device);
#ifndef min
#define min(a,b) (((a)<(b))?(a):(b))
@ -3094,6 +3094,8 @@ atahpa(struct cam_device *device, int retry_count, int timeout,
timeout, ccb,
&ident_buf);
atahpa_print(ident_buf, hpasize, 1);
/* Hint CAM to reprobe the device. */
reprobe(device);
}
}
break;
@ -3236,6 +3238,8 @@ ataama(struct cam_device *device, int retry_count, int timeout,
error = ata_do_identify(device, retry_count,
timeout, ccb, &ident_buf);
ataama_print(ident_buf, nativesize, 1);
/* Hint CAM to reprobe the device. */
reprobe(device);
}
}
break;
@ -9774,7 +9778,7 @@ scsiopcodes(struct cam_device *device, int argc, char **argv,
static int
scsireprobe(struct cam_device *device)
reprobe(struct cam_device *device)
{
union ccb *ccb;
int retval = 0;
@ -9786,7 +9790,7 @@ scsireprobe(struct cam_device *device)
return (1);
}
CCB_CLEAR_ALL_EXCEPT_HDR(&ccb->csio);
CCB_CLEAR_ALL_EXCEPT_HDR(ccb);
ccb->ccb_h.func_code = XPT_REPROBE_LUN;
@ -10538,7 +10542,7 @@ main(int argc, char **argv)
arglist & CAM_ARG_VERBOSE);
break;
case CAM_CMD_REPROBE:
error = scsireprobe(cam_dev);
error = reprobe(cam_dev);
break;
case CAM_CMD_ZONE:
error = zone(cam_dev, argc, argv, combinedopt,