From patchwork Fri Jan 8 15:08:16 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Levitsky X-Patchwork-Id: 42513 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 AB228B6EEA for ; Sat, 9 Jan 2010 02:09:43 +1100 (EST) Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.69 #1 (Red Hat Linux)) id 1NTGRu-0000AB-8B; Fri, 08 Jan 2010 15:08:26 +0000 Received: from mail-fx0-f222.google.com ([209.85.220.222]) by bombadil.infradead.org with esmtp (Exim 4.69 #1 (Red Hat Linux)) id 1NTGRo-000089-IC for linux-mtd@lists.infradead.org; Fri, 08 Jan 2010 15:08:25 +0000 Received: by fxm22 with SMTP id 22so21924117fxm.2 for ; Fri, 08 Jan 2010 07:08:19 -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=/6GHzSlaSCg1U46rZ6OvfBGIPy71tzjyBaOfVBrLbtc=; b=ZA+k4yM1IQNNzJVFEAx2ow1Lsfn0kM+J64NwAKnFiro2cRouU0ObwT58nXWISeuu3T Zu/Bo91o8pVqBH26jdxJQgxPqjQHc1TLf4K82t/YcFQq/41UQrzyEqvP9CkXXTHctkXf +2vxe3sJ0d5DPtKLV2KDaFPA36GtF0J3RO0jA= 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=nT01av02zCF5ANfpLRX/DWsxyyTx4TuGN58peBYLlY9iyrBvEp15Epc/2UHKkCtKDR FUklGw64YtIfKNMSiKTiz+/s1BAuH+9yfPlaMLvty6m3WeF2pi2n0dhBt7Wx3t5/P0Xi /qThxq1aorxu3lK+elyHOvN/fOQWbOjUXrvzg= Received: by 10.223.73.20 with SMTP id o20mr3592405faj.71.1262963299612; Fri, 08 Jan 2010 07:08:19 -0800 (PST) Received: from ?10.1.0.2? (IGLD-84-228-118-133.inter.net.il [84.228.118.133]) by mx.google.com with ESMTPS id 13sm1590034fks.15.2010.01.08.07.08.18 (version=SSLv3 cipher=RC4-MD5); Fri, 08 Jan 2010 07:08:19 -0800 (PST) Subject: [PATCH 4/9] MTD: make mtdtrans thread freezable. From: Maxim Levitsky To: linux-kernel In-Reply-To: <1262963092.12577.14.camel@maxim-laptop> References: <1262963092.12577.14.camel@maxim-laptop> Date: Fri, 08 Jan 2010 17:08:16 +0200 Message-ID: <1262963296.12577.18.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-20100108_100820_747817_DD3D8686 X-CRM114-Status: GOOD ( 15.40 ) 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: joern , linux-mtd , Alex Dubov 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 e8648ebdc31d65556fccb340e4c16edc43017cf1 Mon Sep 17 00:00:00 2001 From: Maxim Levitsky Date: Fri, 8 Jan 2010 15:52:18 +0200 Subject: [PATCH 4/9] MTD: make mtdtrans thread freezable. This makes the mtd blktrans thread enter the freezer in between accesses to nand device. This will ensure that we aren't suspending 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 04a875f..db996d6 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; }