From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8BD6FC2BA83 for ; Fri, 14 Feb 2020 15:49:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5F66F22314 for ; Fri, 14 Feb 2020 15:49:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1581695359; bh=D4GG98E9c9Y1icIuu9/OOXLVnOGJq8xtVvyjOWugdBc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=vOEv7G+YW9BrUG4ns3Pdnd6OEQA8NIsWkjUoq1bjiwJG16DDFolLAgTzB+unudvRr oLdqwAPiHCF82xf/Wvzow1ipVJBxB002etMr7dTN3jxAC0RM5P5CrPLNWkoeSGH2Bk gJ3bLKrsDhi3b0h59t5EBm2GinC/vOCzoWcpHobA= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729865AbgBNPtS (ORCPT ); Fri, 14 Feb 2020 10:49:18 -0500 Received: from mail.kernel.org ([198.145.29.99]:51852 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729822AbgBNPtP (ORCPT ); Fri, 14 Feb 2020 10:49:15 -0500 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 303742467D; Fri, 14 Feb 2020 15:49:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1581695354; bh=D4GG98E9c9Y1icIuu9/OOXLVnOGJq8xtVvyjOWugdBc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=F8Sxij1ssfjFFSOAWM3Tq18XPsFsFrzWcsATZ9OMWb2dpM+0rUr0KFNRwt/xAaQ1Z VO8RGx8O+9fPCbb4W7J2lEqCyPxo22J/UP1/9B5HpjSW1eHmKffCyYa/gvd0+00rF/ hDUkMPgSYlChsUI5sCTaWebvEewtypExroDS9kfQ= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Jaegeuk Kim , Javier Gonzalez , Damien Le Moal , Shin'ichiro Kawasaki , Chao Yu , Sasha Levin , linux-f2fs-devel@lists.sourceforge.net Subject: [PATCH AUTOSEL 5.5 015/542] f2fs: preallocate DIO blocks when forcing buffered_io Date: Fri, 14 Feb 2020 10:40:07 -0500 Message-Id: <20200214154854.6746-15-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200214154854.6746-1-sashal@kernel.org> References: <20200214154854.6746-1-sashal@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jaegeuk Kim [ Upstream commit 47501f87c61ad2aa234add63e1ae231521dbc3f5 ] The previous preallocation and DIO decision like below. allow_outplace_dio !allow_outplace_dio f2fs_force_buffered_io (*) No_Prealloc / Buffered_IO Prealloc / Buffered_IO !f2fs_force_buffered_io No_Prealloc / DIO Prealloc / DIO But, Javier reported Case (*) where zoned device bypassed preallocation but fell back to buffered writes in f2fs_direct_IO(), resulting in stale data being read. In order to fix the issue, actually we need to preallocate blocks whenever we fall back to buffered IO like this. No change is made in the other cases. allow_outplace_dio !allow_outplace_dio f2fs_force_buffered_io (*) Prealloc / Buffered_IO Prealloc / Buffered_IO !f2fs_force_buffered_io No_Prealloc / DIO Prealloc / DIO Reported-and-tested-by: Javier Gonzalez Signed-off-by: Damien Le Moal Tested-by: Shin'ichiro Kawasaki Reviewed-by: Chao Yu Reviewed-by: Javier González Signed-off-by: Jaegeuk Kim Signed-off-by: Sasha Levin --- fs/f2fs/data.c | 13 ------------- fs/f2fs/file.c | 43 +++++++++++++++++++++++++++++++++---------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index a034cd0ce0217..fc40a72f7827f 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -1180,19 +1180,6 @@ int f2fs_preallocate_blocks(struct kiocb *iocb, struct iov_iter *from) int err = 0; bool direct_io = iocb->ki_flags & IOCB_DIRECT; - /* convert inline data for Direct I/O*/ - if (direct_io) { - err = f2fs_convert_inline_inode(inode); - if (err) - return err; - } - - if (direct_io && allow_outplace_dio(inode, iocb, from)) - return 0; - - if (is_inode_flag_set(inode, FI_NO_PREALLOC)) - return 0; - map.m_lblk = F2FS_BLK_ALIGN(iocb->ki_pos); map.m_len = F2FS_BYTES_TO_BLK(iocb->ki_pos + iov_iter_count(from)); if (map.m_len > map.m_lblk) diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c index 13aef5f28fa8f..33c412d178f0f 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c @@ -3383,18 +3383,41 @@ static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from) ret = -EAGAIN; goto out; } - } else { - preallocated = true; - target_size = iocb->ki_pos + iov_iter_count(from); + goto write; + } - err = f2fs_preallocate_blocks(iocb, from); - if (err) { - clear_inode_flag(inode, FI_NO_PREALLOC); - inode_unlock(inode); - ret = err; - goto out; - } + if (is_inode_flag_set(inode, FI_NO_PREALLOC)) + goto write; + + if (iocb->ki_flags & IOCB_DIRECT) { + /* + * Convert inline data for Direct I/O before entering + * f2fs_direct_IO(). + */ + err = f2fs_convert_inline_inode(inode); + if (err) + goto out_err; + /* + * If force_buffere_io() is true, we have to allocate + * blocks all the time, since f2fs_direct_IO will fall + * back to buffered IO. + */ + if (!f2fs_force_buffered_io(inode, iocb, from) && + allow_outplace_dio(inode, iocb, from)) + goto write; + } + preallocated = true; + target_size = iocb->ki_pos + iov_iter_count(from); + + err = f2fs_preallocate_blocks(iocb, from); + if (err) { +out_err: + clear_inode_flag(inode, FI_NO_PREALLOC); + inode_unlock(inode); + ret = err; + goto out; } +write: ret = __generic_file_write_iter(iocb, from); clear_inode_flag(inode, FI_NO_PREALLOC); -- 2.20.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2EC85C3B1A2 for ; Fri, 14 Feb 2020 15:49:23 +0000 (UTC) Received: from lists.sourceforge.net (lists.sourceforge.net [216.105.38.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id F252024689; Fri, 14 Feb 2020 15:49:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=sourceforge.net header.i=@sourceforge.net header.b="QDUnSxao"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=sf.net header.i=@sf.net header.b="UqwiVjaI"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="F8Sxij1s" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F252024689 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=linux-f2fs-devel-bounces@lists.sourceforge.net Received: from [127.0.0.1] (helo=sfs-ml-4.v29.lw.sourceforge.com) by sfs-ml-4.v29.lw.sourceforge.com with esmtp (Exim 4.90_1) (envelope-from ) id 1j2dDV-0004eN-VL; Fri, 14 Feb 2020 15:49:21 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-4.v29.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1j2dDV-0004eD-7G for linux-f2fs-devel@lists.sourceforge.net; Fri, 14 Feb 2020 15:49:21 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:Content-Type:MIME-Version :References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=t9AU4MWpi+8KwMpUhWqUqPX13jY56yg1GxkMo/06Qpo=; b=QDUnSxaoP+0Deoi0ZK20B1+hyN Oj3SK0toBeOHI/GtZtIvXRo83BS6Ahq43SOvicU5Laks3jSPdBBRyfKX7NyEBHZ5sbQqBSPjAR3bh URoNUWkdohae4MrYQNxwUkSVSP3nV58iL/wKPDq6QYRAshMVfuUt2KxgHPgYEt37wf6M=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References: In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=t9AU4MWpi+8KwMpUhWqUqPX13jY56yg1GxkMo/06Qpo=; b=UqwiVjaI7peVVTJPT1dSTLY+h9 5rMk/n080UE/XtsFIfRIW31xmeLLt1Dnpb6hGwXyxAFCCFnPFMZXND2K7F4xOCn+MwiX3LQheZ5nB 2ywbjSrnh27P7brz/l3fysAtjelWFLSjfNaYNGepfAY0YHdOwDBjKms+NvdSOgQ8z9QE=; Received: from mail.kernel.org ([198.145.29.99]) by sfi-mx-3.v28.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.92.2) id 1j2dDT-0045Xf-Q3 for linux-f2fs-devel@lists.sourceforge.net; Fri, 14 Feb 2020 15:49:21 +0000 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 303742467D; Fri, 14 Feb 2020 15:49:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1581695354; bh=D4GG98E9c9Y1icIuu9/OOXLVnOGJq8xtVvyjOWugdBc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=F8Sxij1ssfjFFSOAWM3Tq18XPsFsFrzWcsATZ9OMWb2dpM+0rUr0KFNRwt/xAaQ1Z VO8RGx8O+9fPCbb4W7J2lEqCyPxo22J/UP1/9B5HpjSW1eHmKffCyYa/gvd0+00rF/ hDUkMPgSYlChsUI5sCTaWebvEewtypExroDS9kfQ= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Date: Fri, 14 Feb 2020 10:40:07 -0500 Message-Id: <20200214154854.6746-15-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200214154854.6746-1-sashal@kernel.org> References: <20200214154854.6746-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-Headers-End: 1j2dDT-0045Xf-Q3 Subject: [f2fs-dev] [PATCH AUTOSEL 5.5 015/542] f2fs: preallocate DIO blocks when forcing buffered_io X-BeenThere: linux-f2fs-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sasha Levin , Javier Gonzalez , Damien Le Moal , linux-f2fs-devel@lists.sourceforge.net, Jaegeuk Kim Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net RnJvbTogSmFlZ2V1ayBLaW0gPGphZWdldWtAa2VybmVsLm9yZz4KClsgVXBzdHJlYW0gY29tbWl0 IDQ3NTAxZjg3YzYxYWQyYWEyMzRhZGQ2M2UxYWUyMzE1MjFkYmMzZjUgXQoKVGhlIHByZXZpb3Vz IHByZWFsbG9jYXRpb24gYW5kIERJTyBkZWNpc2lvbiBsaWtlIGJlbG93LgoKICAgICAgICAgICAg ICAgICAgICAgICAgIGFsbG93X291dHBsYWNlX2RpbyAgICAgICAgICAgICAgIWFsbG93X291dHBs YWNlX2RpbwpmMmZzX2ZvcmNlX2J1ZmZlcmVkX2lvICAgKCopIE5vX1ByZWFsbG9jIC8gQnVmZmVy ZWRfSU8gICBQcmVhbGxvYyAvIEJ1ZmZlcmVkX0lPCiFmMmZzX2ZvcmNlX2J1ZmZlcmVkX2lvICBO b19QcmVhbGxvYyAvIERJTyAgICAgICAgICAgICAgIFByZWFsbG9jIC8gRElPCgpCdXQsIEphdmll ciByZXBvcnRlZCBDYXNlICgqKSB3aGVyZSB6b25lZCBkZXZpY2UgYnlwYXNzZWQgcHJlYWxsb2Nh dGlvbiBidXQKZmVsbCBiYWNrIHRvIGJ1ZmZlcmVkIHdyaXRlcyBpbiBmMmZzX2RpcmVjdF9JTygp LCByZXN1bHRpbmcgaW4gc3RhbGUgZGF0YQpiZWluZyByZWFkLgoKSW4gb3JkZXIgdG8gZml4IHRo ZSBpc3N1ZSwgYWN0dWFsbHkgd2UgbmVlZCB0byBwcmVhbGxvY2F0ZSBibG9ja3Mgd2hlbmV2ZXIK d2UgZmFsbCBiYWNrIHRvIGJ1ZmZlcmVkIElPIGxpa2UgdGhpcy4gTm8gY2hhbmdlIGlzIG1hZGUg aW4gdGhlIG90aGVyIGNhc2VzLgoKICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X291dHBs YWNlX2RpbyAgICAgICAgICAgICAgIWFsbG93X291dHBsYWNlX2RpbwpmMmZzX2ZvcmNlX2J1ZmZl cmVkX2lvICAgKCopIFByZWFsbG9jIC8gQnVmZmVyZWRfSU8gICAgICBQcmVhbGxvYyAvIEJ1ZmZl cmVkX0lPCiFmMmZzX2ZvcmNlX2J1ZmZlcmVkX2lvICBOb19QcmVhbGxvYyAvIERJTyAgICAgICAg ICAgICAgIFByZWFsbG9jIC8gRElPCgpSZXBvcnRlZC1hbmQtdGVzdGVkLWJ5OiBKYXZpZXIgR29u emFsZXogPGphdmllckBqYXZpZ29uLmNvbT4KU2lnbmVkLW9mZi1ieTogRGFtaWVuIExlIE1vYWwg PGRhbWllbi5sZW1vYWxAd2RjLmNvbT4KVGVzdGVkLWJ5OiBTaGluJ2ljaGlybyBLYXdhc2FraSA8 c2hpbmljaGlyby5rYXdhc2FraUB3ZGMuY29tPgpSZXZpZXdlZC1ieTogQ2hhbyBZdSA8eXVjaGFv MEBodWF3ZWkuY29tPgpSZXZpZXdlZC1ieTogSmF2aWVyIEdvbnrDoWxleiA8amF2aWVyQGphdmln b24uY29tPgpTaWduZWQtb2ZmLWJ5OiBKYWVnZXVrIEtpbSA8amFlZ2V1a0BrZXJuZWwub3JnPgpT aWduZWQtb2ZmLWJ5OiBTYXNoYSBMZXZpbiA8c2FzaGFsQGtlcm5lbC5vcmc+Ci0tLQogZnMvZjJm cy9kYXRhLmMgfCAxMyAtLS0tLS0tLS0tLS0tCiBmcy9mMmZzL2ZpbGUuYyB8IDQzICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMzMg aW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZnMvZjJmcy9kYXRh LmMgYi9mcy9mMmZzL2RhdGEuYwppbmRleCBhMDM0Y2QwY2UwMjE3Li5mYzQwYTcyZjc4MjdmIDEw MDY0NAotLS0gYS9mcy9mMmZzL2RhdGEuYworKysgYi9mcy9mMmZzL2RhdGEuYwpAQCAtMTE4MCwx OSArMTE4MCw2IEBAIGludCBmMmZzX3ByZWFsbG9jYXRlX2Jsb2NrcyhzdHJ1Y3Qga2lvY2IgKmlv Y2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKIAlpbnQgZXJyID0gMDsKIAlib29sIGRpcmVjdF9p byA9IGlvY2ItPmtpX2ZsYWdzICYgSU9DQl9ESVJFQ1Q7CiAKLQkvKiBjb252ZXJ0IGlubGluZSBk YXRhIGZvciBEaXJlY3QgSS9PKi8KLQlpZiAoZGlyZWN0X2lvKSB7Ci0JCWVyciA9IGYyZnNfY29u dmVydF9pbmxpbmVfaW5vZGUoaW5vZGUpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9 Ci0KLQlpZiAoZGlyZWN0X2lvICYmIGFsbG93X291dHBsYWNlX2Rpbyhpbm9kZSwgaW9jYiwgZnJv bSkpCi0JCXJldHVybiAwOwotCi0JaWYgKGlzX2lub2RlX2ZsYWdfc2V0KGlub2RlLCBGSV9OT19Q UkVBTExPQykpCi0JCXJldHVybiAwOwotCiAJbWFwLm1fbGJsayA9IEYyRlNfQkxLX0FMSUdOKGlv Y2ItPmtpX3Bvcyk7CiAJbWFwLm1fbGVuID0gRjJGU19CWVRFU19UT19CTEsoaW9jYi0+a2lfcG9z ICsgaW92X2l0ZXJfY291bnQoZnJvbSkpOwogCWlmIChtYXAubV9sZW4gPiBtYXAubV9sYmxrKQpk aWZmIC0tZ2l0IGEvZnMvZjJmcy9maWxlLmMgYi9mcy9mMmZzL2ZpbGUuYwppbmRleCAxM2FlZjVm MjhmYThmLi4zM2M0MTJkMTc4ZjBmIDEwMDY0NAotLS0gYS9mcy9mMmZzL2ZpbGUuYworKysgYi9m cy9mMmZzL2ZpbGUuYwpAQCAtMzM4MywxOCArMzM4Myw0MSBAQCBzdGF0aWMgc3NpemVfdCBmMmZz X2ZpbGVfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJv bSkKIAkJCQlyZXQgPSAtRUFHQUlOOwogCQkJCWdvdG8gb3V0OwogCQkJfQotCQl9IGVsc2Ugewot CQkJcHJlYWxsb2NhdGVkID0gdHJ1ZTsKLQkJCXRhcmdldF9zaXplID0gaW9jYi0+a2lfcG9zICsg aW92X2l0ZXJfY291bnQoZnJvbSk7CisJCQlnb3RvIHdyaXRlOworCQl9CiAKLQkJCWVyciA9IGYy ZnNfcHJlYWxsb2NhdGVfYmxvY2tzKGlvY2IsIGZyb20pOwotCQkJaWYgKGVycikgewotCQkJCWNs ZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEZJX05PX1BSRUFMTE9DKTsKLQkJCQlpbm9kZV91bmxvY2so aW5vZGUpOwotCQkJCXJldCA9IGVycjsKLQkJCQlnb3RvIG91dDsKLQkJCX0KKwkJaWYgKGlzX2lu b2RlX2ZsYWdfc2V0KGlub2RlLCBGSV9OT19QUkVBTExPQykpCisJCQlnb3RvIHdyaXRlOworCisJ CWlmIChpb2NiLT5raV9mbGFncyAmIElPQ0JfRElSRUNUKSB7CisJCQkvKgorCQkJICogQ29udmVy dCBpbmxpbmUgZGF0YSBmb3IgRGlyZWN0IEkvTyBiZWZvcmUgZW50ZXJpbmcKKwkJCSAqIGYyZnNf ZGlyZWN0X0lPKCkuCisJCQkgKi8KKwkJCWVyciA9IGYyZnNfY29udmVydF9pbmxpbmVfaW5vZGUo aW5vZGUpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIG91dF9lcnI7CisJCQkvKgorCQkJICogSWYg Zm9yY2VfYnVmZmVyZV9pbygpIGlzIHRydWUsIHdlIGhhdmUgdG8gYWxsb2NhdGUKKwkJCSAqIGJs b2NrcyBhbGwgdGhlIHRpbWUsIHNpbmNlIGYyZnNfZGlyZWN0X0lPIHdpbGwgZmFsbAorCQkJICog YmFjayB0byBidWZmZXJlZCBJTy4KKwkJCSAqLworCQkJaWYgKCFmMmZzX2ZvcmNlX2J1ZmZlcmVk X2lvKGlub2RlLCBpb2NiLCBmcm9tKSAmJgorCQkJCQlhbGxvd19vdXRwbGFjZV9kaW8oaW5vZGUs IGlvY2IsIGZyb20pKQorCQkJCWdvdG8gd3JpdGU7CisJCX0KKwkJcHJlYWxsb2NhdGVkID0gdHJ1 ZTsKKwkJdGFyZ2V0X3NpemUgPSBpb2NiLT5raV9wb3MgKyBpb3ZfaXRlcl9jb3VudChmcm9tKTsK KworCQllcnIgPSBmMmZzX3ByZWFsbG9jYXRlX2Jsb2Nrcyhpb2NiLCBmcm9tKTsKKwkJaWYgKGVy cikgeworb3V0X2VycjoKKwkJCWNsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEZJX05PX1BSRUFMTE9D KTsKKwkJCWlub2RlX3VubG9jayhpbm9kZSk7CisJCQlyZXQgPSBlcnI7CisJCQlnb3RvIG91dDsK IAkJfQord3JpdGU6CiAJCXJldCA9IF9fZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIoaW9jYiwgZnJv bSk7CiAJCWNsZWFyX2lub2RlX2ZsYWcoaW5vZGUsIEZJX05PX1BSRUFMTE9DKTsKIAotLSAKMi4y MC4xCgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxp bnV4LWYyZnMtZGV2ZWwgbWFpbGluZyBsaXN0CkxpbnV4LWYyZnMtZGV2ZWxAbGlzdHMuc291cmNl Zm9yZ2UubmV0Cmh0dHBzOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL2xp bnV4LWYyZnMtZGV2ZWwK