From patchwork Sat Mar 8 12:59:14 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Pen X-Patchwork-Id: 328186 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from casper.infradead.org (casper.infradead.org [IPv6:2001:770:15f::2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id E76422C0079 for ; Sun, 9 Mar 2014 00:00:05 +1100 (EST) Received: from merlin.infradead.org ([2001:4978:20e::2]) by casper.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1WMGr1-0002oA-Qa; Sat, 08 Mar 2014 12:59:52 +0000 Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1WMGr0-0002e6-9m; Sat, 08 Mar 2014 12:59:50 +0000 Received: from mail-pa0-x235.google.com ([2607:f8b0:400e:c03::235]) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1WMGqy-0002cu-78 for linux-mtd@lists.infradead.org; Sat, 08 Mar 2014 12:59:48 +0000 Received: by mail-pa0-f53.google.com with SMTP id ld10so5308911pab.26 for ; Sat, 08 Mar 2014 04:59:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=N0HfkLGX2/bpnzDiVaf8Y2mYWW5ah1+Mx1klbA+PXRk=; b=o3b9CAA0srXjNvcnlhWDQZjoWN0WECjLt44pNgm53wS7snQAEvOfegipYVF+mFxX9W j/51o0BzXflsF9rksL3tLQOe6DcS9lrm2UBACIkXKKao1gtvbF1ogjCyS7APILehMgMS 402QD5VFn8NW0/3su7/S/KB+lNhBO0YUR5vSyyYmamLTmLSl1fc0T6BtzqblfNL9Zbqc BXM9+JRfhq7/WAtwHm1TPNz/3BNVs6cNAg2NURFdO/NherWNz6RulTpgQlGYkTMiQe8y GsqvQl46HK+14jHOuC4WhPsU83xWCgVqku2R1n/muH380loDnOx6m1SY4K12O6WAvoro 6M8Q== X-Received: by 10.66.252.135 with SMTP id zs7mr28630977pac.13.1394283564711; Sat, 08 Mar 2014 04:59:24 -0800 (PST) Received: from localhost.localdomain ([222.117.133.137]) by mx.google.com with ESMTPSA id np9sm36607325pbc.31.2014.03.08.04.59.22 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 08 Mar 2014 04:59:23 -0800 (PST) From: Roman Pen To: Subject: [v2 PATCH 1/1] mtd: mtd_blkdevs: handle REQ_FLUSH request and do explicit flush of writeback buffer Date: Sat, 8 Mar 2014 21:59:14 +0900 Message-Id: <1394283554-27423-1-git-send-email-r.peniaev@gmail.com> X-Mailer: git-send-email 1.8.5.2 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20140308_075948_332981_1EC612AE X-CRM114-Status: GOOD ( 10.92 ) X-Spam-Score: -2.0 (--) X-Spam-Report: SpamAssassin version 3.3.2 on merlin.infradead.org summary: Content analysis details: (-2.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (r.peniaev[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature Cc: linux-mtd@lists.infradead.org, Brian Norris , David Woodhouse , linux-kernel@vger.kernel.org, Roman Peniaev X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Roman Peniaev mtd_blkdevs is device with volatile cache (writeback buffer), so it should support REQ_FLUSH to do explicit flush. Without this patch 'sync' does not guarantee that writeback buffer will be flushed on disk in case of power off, e.g.: $ cp some_file /mnt $ sync ### POWER OFF In case of this sequence writeback buffer will not be flushed on disk. This patch fixes this behaviour and explicitly reports to block layer that flush requests are being supported. Signed-off-by: Roman Peniaev CC: David Woodhouse CC: Brian Norris CC: linux-mtd@lists.infradead.org CC: linux-kernel@vger.kernel.org --- drivers/mtd/mtd_blkdevs.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/mtd/mtd_blkdevs.c b/drivers/mtd/mtd_blkdevs.c index 5073cbc..b2970a0 100644 --- a/drivers/mtd/mtd_blkdevs.c +++ b/drivers/mtd/mtd_blkdevs.c @@ -89,6 +89,9 @@ static int do_blktrans_request(struct mtd_blktrans_ops *tr, if (req->cmd_type != REQ_TYPE_FS) return -EIO; + if (req->cmd_flags & REQ_FLUSH) + return tr->flush(dev); + if (blk_rq_pos(req) + blk_rq_cur_sectors(req) > get_capacity(req->rq_disk)) return -EIO; @@ -409,6 +412,9 @@ int add_mtd_blktrans_dev(struct mtd_blktrans_dev *new) if (!new->rq) goto error3; + if (tr->flush) + blk_queue_flush(new->rq, REQ_FLUSH); + new->rq->queuedata = new; blk_queue_logical_block_size(new->rq, tr->blksize);