From patchwork Sun Apr 23 18:58:34 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabian Frederick X-Patchwork-Id: 9695255 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 5484A601E9 for ; Sun, 23 Apr 2017 18:59:02 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 48EC326490 for ; Sun, 23 Apr 2017 18:59:02 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3C98C265B9; Sun, 23 Apr 2017 18:59:02 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E9ABE26490 for ; Sun, 23 Apr 2017 18:59:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1163331AbdDWS6n (ORCPT ); Sun, 23 Apr 2017 14:58:43 -0400 Received: from mailrelay117.isp.belgacom.be ([195.238.20.144]:30037 "EHLO mailrelay117.isp.belgacom.be" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1163309AbdDWS6i (ORCPT ); Sun, 23 Apr 2017 14:58:38 -0400 X-Belgacom-Dynamic: yes IronPort-PHdr: =?us-ascii?q?9a23=3ApABOXBRD+KahBnpJt7jqCpjIHdpsv+yvbD5Q0YIu?= =?us-ascii?q?jvd0So/mwa6yYhyN2/xhgRfzUJnB7Loc0qyN4vymATRIyK3CmUhKSIZLWR4BhJ?= =?us-ascii?q?detC0bK+nBN3fGKuX3ZTcxBsVIWQwt1Xi6NU9IBJS2PAWK8TW94jEIBxrwKxd+?= =?us-ascii?q?KPjrFY7OlcS30P2594HObwlSijewZbx/IA+qoQnNq8IbnZZsJqEtxxXTv3BGYf?= =?us-ascii?q?5WxWRmJVKSmxbz+MK994N9/ipTpvws6ddOXb31cKokQ7NYCi8mM30u683wqRbD?= =?us-ascii?q?VwqP6WACXWgQjxFFHhLK7BD+Xpf2ryv6qu9w0zSUMMHqUbw5Xymp4qF2QxHqlS?= =?us-ascii?q?gHLSY0/mHJhMJtgqxVoxWvqgdjz4LIeoyZKOBzcr/Bcd4cWGFPXtxRVytEAo6k?= =?us-ascii?q?b4UAFfEOPedCoIn7ulAArQG+ChexC+zx0D9Ih2P53a4n2OkmHwHJxhcvH9wVvX?= =?us-ascii?q?TPr9X0NKESXv6pzKXS1jrMcepb1DHg44bLahAsufWBUa9qfcbMy0QiExnJgkiU?= =?us-ascii?q?pIHmJT+Y1uQAvm6G5OR6T+2vkXQoqwRprziqwccjl5fGi5oOylDB6SV52IE1Jc?= =?us-ascii?q?CkSEJjYd6rDp9QtyaCOotyRcMtX3tnuCI6yr0Bop67YDIGyJAgxxHDcfOHd5WH?= =?us-ascii?q?4hXmVOmLIDd4gmppeLO5hxms7Uit0unxWtSu3FpXrCdIlsPAum0J2hHQ8MSKSv?= =?us-ascii?q?tw8l+k2TmV1gDT7u9EIVozlareM5MhzKQ/mYEdsUnYBS/2m0X3jKmIeUU44OSn?= =?us-ascii?q?8Probq38ppCAL490lh3+MqM2l8y9G+s3LgsOUnOA+eShz73s41f1T6lNjv0ziq?= =?us-ascii?q?PZqozVJdwHpq6lBA9YyoIj6xe5Dze739UUhHcHLElYdx2ZkYjmJVXOLevmDfew?= =?us-ascii?q?nVusii1nx/PYMb37BJXCMHzDnK3mfbZn5E5W0BAzwsxH55JIFrEBJ+r+WkvwtN?= =?us-ascii?q?zeEx84PBW4w+X5B9Vn0IMRR2aPD7SHMKPdr1CI/PgjI+qSa48PvjbyNfwl6+Tp?= =?us-ascii?q?jX8jll8XZbOp0ocPaHCkAvRmJF2UYXT2jdgaH2cHpRE+TO/qiV2ETzFTe2y+UL?= =?us-ascii?q?ki6WJzNIXzL47FDqOkmrXJiCWyFZ5+fX1dBxaHFnK+JKueXPJZRiuYI8Zn2hIe?= =?us-ascii?q?WLSsUY4q1ln6ugbwxZJ8LfvS9zFev5+1h4s93PHaiRxnrW88NM+ayWzYF2w=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2AeAgBf+PxY/zfGs1tcHAELAQUBGAELA?= =?us-ascii?q?QUBgj9rJ4FGjm+RHAGVOoIPIYYDhA1AGAEBAQEBAQEBAQEBaiiCMyCCcC8jKXE?= =?us-ascii?q?kE4oPEa1ROoQQhzSGU4FciwyCSgWdQZJ5DZFXSJNRHziBBkMdGIRdAU8cgWU+N?= =?us-ascii?q?YZ5KoITAQEB?= X-IPAS-Result: =?us-ascii?q?A2AeAgBf+PxY/zfGs1tcHAELAQUBGAELAQUBgj9rJ4FGjm+?= =?us-ascii?q?RHAGVOoIPIYYDhA1AGAEBAQEBAQEBAQEBaiiCMyCCcC8jKXEkE4oPEa1ROoQQh?= =?us-ascii?q?zSGU4FciwyCSgWdQZJ5DZFXSJNRHziBBkMdGIRdAU8cgWU+NYZ5KoITAQEB?= Received: from 55.198-179-91.adsl-dyn.isp.belgacom.be (HELO localhost.localdomain) ([91.179.198.55]) by relay.skynet.be with ESMTP; 23 Apr 2017 20:58:36 +0200 From: Fabian Frederick To: Jan Kara Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, fabf@skynet.be Subject: [PATCH 2/2 linux-next] udf: use kmap_atomic for memcpy copying Date: Sun, 23 Apr 2017 20:58:34 +0200 Message-Id: <20170423185834.6088-1-fabf@skynet.be> X-Mailer: git-send-email 2.9.3 Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Use temporary mapping for memory copying operations. To avoid any sleeping problem, mark_inode_dirty(inode) was moved after kunmap() in udf_adinicb_readpage() down_write(&iinfo->i_data_sem) set before kmap_atomic() in udf_expand_file_adinicb() Signed-off-by: Fabian Frederick --- This is untested. fs/udf/file.c | 10 +++++----- fs/udf/inode.c | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/fs/udf/file.c b/fs/udf/file.c index e04cc0c..f5eb2d5 100644 --- a/fs/udf/file.c +++ b/fs/udf/file.c @@ -44,12 +44,12 @@ static void __udf_adinicb_readpage(struct page *page) char *kaddr; struct udf_inode_info *iinfo = UDF_I(inode); - kaddr = kmap(page); + kaddr = kmap_atomic(page); memcpy(kaddr, iinfo->i_ext.i_data + iinfo->i_lenEAttr, inode->i_size); memset(kaddr + inode->i_size, 0, PAGE_SIZE - inode->i_size); flush_dcache_page(page); SetPageUptodate(page); - kunmap(page); + kunmap_atomic(kaddr); } static int udf_adinicb_readpage(struct file *file, struct page *page) @@ -70,11 +70,11 @@ static int udf_adinicb_writepage(struct page *page, BUG_ON(!PageLocked(page)); - kaddr = kmap(page); + kaddr = kmap_atomic(page); memcpy(iinfo->i_ext.i_data + iinfo->i_lenEAttr, kaddr, inode->i_size); - mark_inode_dirty(inode); SetPageUptodate(page); - kunmap(page); + kunmap_atomic(kaddr); + mark_inode_dirty(inode); unlock_page(page); return 0; diff --git a/fs/udf/inode.c b/fs/udf/inode.c index 8715dcd..98c510e 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -276,14 +276,14 @@ int udf_expand_file_adinicb(struct inode *inode) return -ENOMEM; if (!PageUptodate(page)) { - kaddr = kmap(page); + kaddr = kmap_atomic(page); memset(kaddr + iinfo->i_lenAlloc, 0x00, PAGE_SIZE - iinfo->i_lenAlloc); memcpy(kaddr, iinfo->i_ext.i_data + iinfo->i_lenEAttr, iinfo->i_lenAlloc); flush_dcache_page(page); SetPageUptodate(page); - kunmap(page); + kunmap_atomic(kaddr); } down_write(&iinfo->i_data_sem); memset(iinfo->i_ext.i_data + iinfo->i_lenEAttr, 0x00, @@ -300,11 +300,11 @@ int udf_expand_file_adinicb(struct inode *inode) if (err) { /* Restore everything back so that we don't lose data... */ lock_page(page); - kaddr = kmap(page); down_write(&iinfo->i_data_sem); + kaddr = kmap_atomic(page); memcpy(iinfo->i_ext.i_data + iinfo->i_lenEAttr, kaddr, inode->i_size); - kunmap(page); + kunmap_atomic(kaddr); unlock_page(page); iinfo->i_alloc_type = ICBTAG_FLAG_AD_IN_ICB; inode->i_data.a_ops = &udf_adinicb_aops;