From owner-freebsd-scsi@FreeBSD.ORG Thu Mar 27 16:27:44 2003 Return-Path: Delivered-To: freebsd-scsi@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id AF0B037B401 for ; Thu, 27 Mar 2003 16:27:44 -0800 (PST) Received: from cvsup.no.freebsd.org (c2h5oh.idi.ntnu.no [129.241.103.69]) by mx1.FreeBSD.org (Postfix) with ESMTP id A7EA143F75 for ; Thu, 27 Mar 2003 16:27:43 -0800 (PST) (envelope-from Tor.Egge@cvsup.no.freebsd.org) Received: from localhost (localhost [127.0.0.1]) by cvsup.no.freebsd.org (8.12.6/8.12.6) with ESMTP id h2S0Rg4k065763 for ; Fri, 28 Mar 2003 00:27:42 GMT (envelope-from tegge@cvsup.no.freebsd.org) To: freebsd-scsi@freebsd.org From: Tor.Egge@cvsup.no.freebsd.org X-Mailer: Mew version 1.94.2 on Emacs 20.7 / Mule 4.0 (HANANOEN) Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="--Next_Part(Fri_Mar_28_00:25:34_2003_809)--" Content-Transfer-Encoding: 7bit Message-Id: <20030328002742F.tegge@cvsup.no.freebsd.org> Date: Fri, 28 Mar 2003 00:27:42 GMT Sender: Tor Egge X-Dispatcher: imput version 20000228(IM140) Lines: 41 X-Spam-Status: No, hits=-11.6 required=5.0 tests=AWL,NO_REAL_NAME,PATCH_UNIFIED_DIFF autolearn=ham version=2.50 X-Spam-Level: X-Spam-Checker-Version: SpamAssassin 2.50 (1.173-2003-02-20-exp) Subject: incomplete cleanup after failed vmapbuf() in cam_periph_mapmem() X-BeenThere: freebsd-scsi@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: SCSI subsystem List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 28 Mar 2003 00:27:45 -0000 ----Next_Part(Fri_Mar_28_00:25:34_2003_809)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit The cleanup after a failed vmapbuf() in cam_periph_mapmem() seems to be incomplete. Buffers that have already been successfully mapped are not unmapped before being released. The buffer that could not be mapped is not released. A suggested fix is enclosed. - Tor Egge ----Next_Part(Fri_Mar_28_00:25:34_2003_809)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="periph.diff" Index: sys/cam/cam_periph.c =================================================================== RCS file: /home/ncvs/src/sys/cam/cam_periph.c,v retrieving revision 1.47 diff -u -r1.47 cam_periph.c --- sys/cam/cam_periph.c 15 Mar 2003 21:59:05 -0000 1.47 +++ sys/cam/cam_periph.c 28 Mar 2003 00:17:37 -0000 @@ -675,9 +675,12 @@ (u_long)lengths[i]); for (j = 0; j < i; ++j) { *data_ptrs[j] = mapinfo->bp[j]->b_saveaddr; + vunmapbuf(mapinfo->bp[j]); mapinfo->bp[j]->b_flags &= ~B_PHYS; relpbuf(mapinfo->bp[j], NULL); } + mapinfo->bp[i]->b_flags &= ~B_PHYS; + relpbuf(mapinfo->bp[i], NULL); PRELE(curproc); return(EACCES); } ----Next_Part(Fri_Mar_28_00:25:34_2003_809)----