Author: mav
Date: Tue Jul 23 19:42:03 2019
New Revision: 350257
URL: https://svnweb.freebsd.org/changeset/base/350257

Log:
  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.

Modified:
  head/sbin/camcontrol/camcontrol.c

Modified: head/sbin/camcontrol/camcontrol.c
==============================================================================
--- head/sbin/camcontrol/camcontrol.c   Tue Jul 23 18:40:32 2019        
(r350256)
+++ head/sbin/camcontrol/camcontrol.c   Tue Jul 23 19:42:03 2019        
(r350257)
@@ -301,6 +301,7 @@ static int scsiserial(struct cam_device *device, int t
                      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,
 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, 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
                                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 @@ bailout:
 
 
 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,
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to