From owner-svn-src-all@FreeBSD.ORG Thu Apr 14 16:01:06 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5553A1065673; Thu, 14 Apr 2011 16:01:06 +0000 (UTC) (envelope-from jh@FreeBSD.org) Received: from gw02.mail.saunalahti.fi (gw02.mail.saunalahti.fi [195.197.172.116]) by mx1.freebsd.org (Postfix) with ESMTP id 98A9B8FC17; Thu, 14 Apr 2011 16:01:05 +0000 (UTC) Received: from a91-153-123-205.elisa-laajakaista.fi (a91-153-123-205.elisa-laajakaista.fi [91.153.123.205]) by gw02.mail.saunalahti.fi (Postfix) with SMTP id EE01E1397B6; Thu, 14 Apr 2011 19:00:59 +0300 (EEST) Date: Thu, 14 Apr 2011 19:00:59 +0300 From: Jaakko Heinonen To: Alexander Motin Message-ID: <20110414160059.GA1644@a91-153-123-205.elisa-laajakaista.fi> References: <201104140911.p3E9BooX027074@svn.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201104140911.p3E9BooX027074@svn.freebsd.org> User-Agent: Mutt/1.5.21 (2010-09-15) Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r220618 - head/sys/cam/ata X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Apr 2011 16:01:06 -0000 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? I am not completely sure if it's safe to move setting of minimum_cmd_size in daregister(). --- 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; %%% -- Jaakko