#endif
 
 static int  sd_revalidate_disk(struct gendisk *);
+static void sd_unlock_native_capacity(struct gendisk *disk);
 static int  sd_probe(struct device *);
 static int  sd_remove(struct device *);
 static void sd_shutdown(struct device *);
 #endif
        .media_changed          = sd_media_changed,
        .revalidate_disk        = sd_revalidate_disk,
+       .unlock_native_capacity = sd_unlock_native_capacity,
 };
 
 static unsigned int sd_completed_bytes(struct scsi_cmnd *scmd)
        return 0;
 }
 
+/**
+ *     sd_unlock_native_capacity - unlock native capacity
+ *     @disk: struct gendisk to set capacity for
+ *
+ *     Block layer calls this function if it detects that partitions
+ *     on @disk reach beyond the end of the device.  If the SCSI host
+ *     implements ->unlock_native_capacity() method, it's invoked to
+ *     give it a chance to adjust the device capacity.
+ *
+ *     CONTEXT:
+ *     Defined by block layer.  Might sleep.
+ */
+static void sd_unlock_native_capacity(struct gendisk *disk)
+{
+       struct scsi_device *sdev = scsi_disk(disk)->device;
+
+       if (sdev->host->hostt->unlock_native_capacity)
+               sdev->host->hostt->unlock_native_capacity(sdev);
+}
+
 /**
  *     sd_format_disk_name - format disk name
  *     @prefix: name prefix - ie. "sd" for SCSI disks
 
        int (* bios_param)(struct scsi_device *, struct block_device *,
                        sector_t, int []);
 
+       /*
+        * This function is called when one or more partitions on the
+        * device reach beyond the end of the device.
+        *
+        * Status: OPTIONAL
+        */
+       void (*unlock_native_capacity)(struct scsi_device *);
+
        /*
         * Can be used to export driver statistics and other infos to the
         * world outside the kernel ie. userspace and it also provides an