svn commit: r220618 - head/sys/cam/ata
Alexander Motin
mav at FreeBSD.org
Thu Apr 14 20:10:32 UTC 2011
On 14.04.2011 19:00, Jaakko Heinonen wrote:
> On 2011-04-14, Alexander Motin wrote:
>> Fix typo in write_cache tunable name and move TUNABLE_INT_FETCH() out of
>> the SIM lock to fix WITNESS warning.
>
> Thanks!
>
> Does this analogous patch for cd(4) and da(4) look good?
Looks fine.
> I am not
> completely sure if it's safe to move setting of minimum_cmd_size in
> daregister().
I see no problem. dastart() in NORMAL state, that using it, won't be
called until device created (to be opened) and hold will not be dropped.
> ---
>
> Move TUNABLE_INT_FETCH() out of the SIM lock to avoid sleeping while
> holding the lock. The fix is analogous to r220618 for ada(4).
>
> %%%
> Index: sys/cam/scsi/scsi_cd.c
> ===================================================================
> --- sys/cam/scsi/scsi_cd.c (revision 220619)
> +++ sys/cam/scsi/scsi_cd.c (working copy)
> @@ -687,6 +687,8 @@ cdregister(struct cam_periph *periph, vo
> else
> softc->minimum_command_size = 6;
>
> + (void)cam_periph_hold(periph, PRIBIO);
> + cam_periph_unlock(periph);
> /*
> * Load the user's default, if any.
> */
> @@ -712,7 +714,6 @@ cdregister(struct cam_periph *periph, vo
> * WORM peripheral driver. WORM drives will also have the WORM
> * driver attached to them.
> */
> - cam_periph_unlock(periph);
> softc->disk = disk_alloc();
> softc->disk->d_devstat = devstat_new_entry("cd",
> periph->unit_number, 0,
> @@ -745,6 +746,7 @@ cdregister(struct cam_periph *periph, vo
> softc->disk->d_hba_subdevice = cpi.hba_subdevice;
> disk_create(softc->disk, DISK_VERSION);
> cam_periph_lock(periph);
> + cam_periph_unhold(periph);
>
> /*
> * Add an async callback so that we get
> Index: sys/cam/scsi/scsi_da.c
> ===================================================================
> --- sys/cam/scsi/scsi_da.c (revision 220619)
> +++ sys/cam/scsi/scsi_da.c (working copy)
> @@ -1231,35 +1231,6 @@ daregister(struct cam_periph *periph, vo
> TASK_INIT(&softc->sysctl_task, 0, dasysctlinit, periph);
>
> /*
> - * RBC devices don't have to support READ(6), only READ(10).
> - */
> - if (softc->quirks& DA_Q_NO_6_BYTE || SID_TYPE(&cgd->inq_data) == T_RBC)
> - softc->minimum_cmd_size = 10;
> - else
> - softc->minimum_cmd_size = 6;
> -
> - /*
> - * Load the user's default, if any.
> - */
> - snprintf(tmpstr, sizeof(tmpstr), "kern.cam.da.%d.minimum_cmd_size",
> - periph->unit_number);
> - TUNABLE_INT_FETCH(tmpstr,&softc->minimum_cmd_size);
> -
> - /*
> - * 6, 10, 12 and 16 are the currently permissible values.
> - */
> - if (softc->minimum_cmd_size< 6)
> - softc->minimum_cmd_size = 6;
> - else if ((softc->minimum_cmd_size> 6)
> - && (softc->minimum_cmd_size<= 10))
> - softc->minimum_cmd_size = 10;
> - else if ((softc->minimum_cmd_size> 10)
> - && (softc->minimum_cmd_size<= 12))
> - softc->minimum_cmd_size = 12;
> - else if (softc->minimum_cmd_size> 12)
> - softc->minimum_cmd_size = 16;
> -
> - /*
> * Register this media as a disk
> */
>
> @@ -1291,6 +1262,35 @@ daregister(struct cam_periph *periph, vo
> dasendorderedtag, softc);
>
> mtx_unlock(periph->sim->mtx);
> + /*
> + * RBC devices don't have to support READ(6), only READ(10).
> + */
> + if (softc->quirks& DA_Q_NO_6_BYTE || SID_TYPE(&cgd->inq_data) == T_RBC)
> + softc->minimum_cmd_size = 10;
> + else
> + softc->minimum_cmd_size = 6;
> +
> + /*
> + * Load the user's default, if any.
> + */
> + snprintf(tmpstr, sizeof(tmpstr), "kern.cam.da.%d.minimum_cmd_size",
> + periph->unit_number);
> + TUNABLE_INT_FETCH(tmpstr,&softc->minimum_cmd_size);
> +
> + /*
> + * 6, 10, 12 and 16 are the currently permissible values.
> + */
> + if (softc->minimum_cmd_size< 6)
> + softc->minimum_cmd_size = 6;
> + else if ((softc->minimum_cmd_size> 6)
> + && (softc->minimum_cmd_size<= 10))
> + softc->minimum_cmd_size = 10;
> + else if ((softc->minimum_cmd_size> 10)
> + && (softc->minimum_cmd_size<= 12))
> + softc->minimum_cmd_size = 12;
> + else if (softc->minimum_cmd_size> 12)
> + softc->minimum_cmd_size = 16;
> +
> softc->disk = disk_alloc();
> softc->disk->d_open = daopen;
> softc->disk->d_close = daclose;
> %%%
>
--
Alexander Motin
More information about the svn-src-head
mailing list