From patchwork Sat Jan 23 00:26:07 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Levitsky X-Patchwork-Id: 43556 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from bombadil.infradead.org (bombadil.infradead.org [18.85.46.34]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 7C221B7CDB for ; Sat, 23 Jan 2010 11:28:20 +1100 (EST) Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.69 #1 (Red Hat Linux)) id 1NYTpS-0006id-3e; Sat, 23 Jan 2010 00:26:18 +0000 Received: from mail-bw0-f212.google.com ([209.85.218.212]) by bombadil.infradead.org with esmtp (Exim 4.69 #1 (Red Hat Linux)) id 1NYTpL-0005j0-Ge for linux-mtd@lists.infradead.org; Sat, 23 Jan 2010 00:26:16 +0000 Received: by mail-bw0-f212.google.com with SMTP id 4so1646175bwz.2 for ; Fri, 22 Jan 2010 16:26:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:subject:from:to:cc :in-reply-to:references:content-type:date:message-id:mime-version :x-mailer:content-transfer-encoding; bh=JUyXKlptmqpp9t8To7uK8CEOkh1pgtWXwTl2pwewAx8=; b=EsYkxY8Ez/j5RXHEPQRtH0m8K8mjdxS2POjp3tiG+W07SzhjkgWGiIFFo1UrxfmCLL dvCg8UeAsJMSKKMAsV4yX5qR95BatgxLcmm7wEIo7ce/FUIF9v7Fx0AHCit13v45T8xs hUPzTFsp7m/PyMwad7HAyTxkUJY0hDP+6D6Ec= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=subject:from:to:cc:in-reply-to:references:content-type:date :message-id:mime-version:x-mailer:content-transfer-encoding; b=rzo/jva/DSy+razYUzOXiqnRaHMcM5zR4qqjbY7ZmkZVtVwa7ij4P6UU+7D/0dWGdC nZew6ggFu85LvBPkihYYGZyUd7pbLp1lQnBVvsYkaeHZas9mpS3KsoCuiL+/YHpsco43 3QPi4GEEIqb/3Mc6IJx4B7TjvYf+GizMvAD+M= Received: by 10.204.5.202 with SMTP id 10mr2076903bkw.24.1264206371002; Fri, 22 Jan 2010 16:26:11 -0800 (PST) Received: from ?10.1.0.2? ([87.70.246.165]) by mx.google.com with ESMTPS id 15sm1235600bwz.8.2010.01.22.16.26.09 (version=SSLv3 cipher=RC4-MD5); Fri, 22 Jan 2010 16:26:10 -0800 (PST) Subject: [PATCH 8/8] MTD: make mtdtrans thread freezeable. From: Maxim Levitsky To: Artem Bityutskiy In-Reply-To: <1264205925.31827.3.camel@maxim-laptop> References: <1264205925.31827.3.camel@maxim-laptop> Date: Sat, 23 Jan 2010 02:26:07 +0200 Message-ID: <1264206367.31827.12.camel@maxim-laptop> Mime-Version: 1.0 X-Mailer: Evolution 2.28.1 X-CRM114-Version: 20090807-BlameThorstenAndJenny ( TRE 0.7.6 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20100122_192611_677675_F88EC625 X-CRM114-Status: GOOD ( 16.09 ) X-Spam-Score: 0.0 (/) X-Spam-Report: SpamAssassin version 3.2.5 on bombadil.infradead.org summary: Content analysis details: (0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- _SUMMARY_ Cc: Alex Dubov , joern , linux-kernel , linux-mtd , Thomas Gleixner , David Woodhouse X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-mtd-bounces@lists.infradead.org Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org >From ebc69b9819f963a17574aa42e93f409368acdfaa Mon Sep 17 00:00:00 2001 From: Maxim Levitsky Date: Sat, 23 Jan 2010 02:09:33 +0200 Subject: [PATCH 8/8] MTD: make mtdtrans thread freezeable. This makes the mtd blktrans thread enter the freezer in between accesses to nand device. This will ensure that we aren't suspening the system in the middle of page read/write and even worse erase, which is a bad idea. Signed-off-by: Maxim Levitsky --- drivers/mtd/mtd_blkdevs.c | 14 +++++++------- 1 files changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/mtd/mtd_blkdevs.c b/drivers/mtd/mtd_blkdevs.c index 33bdef1..ed82396 100644 --- a/drivers/mtd/mtd_blkdevs.c +++ b/drivers/mtd/mtd_blkdevs.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include "mtdcore.h" @@ -79,36 +80,35 @@ static int mtd_blktrans_thread(void *arg) struct request_queue *rq = dev->rq; struct request *req = NULL; - spin_lock_irq(rq->queue_lock); + set_freezable(); while (!kthread_should_stop()) { int res; + try_to_freeze(); + + spin_lock_irq(rq->queue_lock); if (!req && !(req = blk_fetch_request(rq))) { set_current_state(TASK_INTERRUPTIBLE); spin_unlock_irq(rq->queue_lock); schedule(); - spin_lock_irq(rq->queue_lock); continue; } - spin_unlock_irq(rq->queue_lock); + mutex_lock(&dev->lock); res = do_blktrans_request(dev->tr, dev, req); mutex_unlock(&dev->lock); spin_lock_irq(rq->queue_lock); - if (!__blk_end_request_cur(req, res)) req = NULL; + spin_unlock_irq(rq->queue_lock); } if (req) __blk_end_request_all(req, -EIO); - - spin_unlock_irq(rq->queue_lock); - return 0; }