From patchwork Wed Jan 3 08:41:25 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 13509731 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 80251C3DA6E for ; Wed, 3 Jan 2024 08:42:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 188976B0104; Wed, 3 Jan 2024 03:42:56 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 1398D6B0111; Wed, 3 Jan 2024 03:42:56 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id ECA316B0104; Wed, 3 Jan 2024 03:42:55 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id DCE1E6B00DD for ; Wed, 3 Jan 2024 03:42:55 -0500 (EST) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id B3E0716023B for ; Wed, 3 Jan 2024 08:42:55 +0000 (UTC) X-FDA: 81637359510.25.96E1E10 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) by imf05.hostedemail.com (Postfix) with ESMTP id 24331100016 for ; Wed, 3 Jan 2024 08:42:53 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b="ushH/vho"; dmarc=none; spf=none (imf05.hostedemail.com: domain of BATV+f852f126c6d693376302+7437+infradead.org+hch@bombadil.srs.infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=BATV+f852f126c6d693376302+7437+infradead.org+hch@bombadil.srs.infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1704271374; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=vsVwWXzNp/uF3VedPHiPLXVFz+eMZwvkb3rlfHln50o=; b=szYKvL9f9tJD8uHhcMKqeS+IyB4qud4eBGh9otfPXhTeIq/g2ytjbWAbAYSwpvOC1a3/6q qknOsBqsA0gjPAQ9MAHKM/COL0gvk+r44luaSEQ3gWnoT0g9QdUlPCj4GGBjIetxIFINNl 0usCye6WwDXctM1f4G0px7ekHK+2vbU= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b="ushH/vho"; dmarc=none; spf=none (imf05.hostedemail.com: domain of BATV+f852f126c6d693376302+7437+infradead.org+hch@bombadil.srs.infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=BATV+f852f126c6d693376302+7437+infradead.org+hch@bombadil.srs.infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1704271374; a=rsa-sha256; cv=none; b=aTGZzNV7feSN6E1QIUgJqVUcwk7KeKcrO1/G2EURFXAokxgWTm2zrYR7sVqlu7G5am4R9N GjRrEejMnVJjBKGlwkNTTmy8WdfcqZVsc3h0wSccIkTf0nJcn5uP5N+683nJ3q+9HNRG7b CSySuw3nc5HsXC2ZEMAcfuyiwkwktj4= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender :Reply-To:Content-Type:Content-ID:Content-Description; bh=vsVwWXzNp/uF3VedPHiPLXVFz+eMZwvkb3rlfHln50o=; b=ushH/vhogOKJM3dNcUq2jCv9IU q8maRJKSzV35pfdLYBkzK2kXNLfpfTFmJ0/yRj44opJilvDQZzZ7vWgMgeMgr8BqFr2kbeKm8/JuI tFGKIjSbiQprPzQvRjdG5OqHdBLexBDwTl25ZGYwXUMyvyMfx6L/W9C4fMccYIM2FySS3GHDwP03I Y2V9eFYKnpreihOWfze6ik5bw2PufxUXxUECRo+vlFR6JGaIUAs/nKiaTusk9tMckadbG9/R0IjW1 GvK1CFewMDD0bL5nII7yyovgXzFVM0kOIAMKmKnVUy+LbR0R2Duw8/zmq3keDLk2Lz0LEO/8VZosm rqFGj2Aw==; Received: from [89.144.222.185] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.96 #2 (Red Hat Linux)) id 1rKwpr-00A6zm-2U; Wed, 03 Jan 2024 08:42:48 +0000 From: Christoph Hellwig To: Chandan Babu R , "Darrick J. Wong" , Hugh Dickins , Andrew Morton Cc: linux-xfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 14/15] xfs: use xfile_get_page and xfile_put_page in xfile_obj_store Date: Wed, 3 Jan 2024 08:41:25 +0000 Message-Id: <20240103084126.513354-15-hch@lst.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240103084126.513354-1-hch@lst.de> References: <20240103084126.513354-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org. See http://www.infradead.org/rpr.html X-Rspamd-Queue-Id: 24331100016 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: 7roo9ecqm1xejc8hk5jbbn49p6kuamq7 X-HE-Tag: 1704271373-765379 X-HE-Meta: U2FsdGVkX19KgGRGJz01KzbC4H/vlK9Qq9Q6t/9g6dh8HkFxjiAa6aw+aMNRj75kdPuTtKzHbByaz3tT6Kyg59fX/kWI6NROU0bnlkEyLxL77lVTWqbk4jLGoYjMqDTEfqHkCct0ws+hDLoAKP6s01roSp7LbyJ5vqXTb6Yob3z5IsvVirUiNsorgv0eD66OJDiPRF4AOmpd2uzvv4YjjX9sNe+J5IkqL+sVWL5jjyDC+haFn58uM8JOf9AV74X9PGz9uSg4pRWExvPi00abzjh3Ku63XN5F6wZTrkGd9i5TPWhFS9xef85REoQj9iwGCZwllRqqzdR04CfxMxfWu5DC9eoTJ9T0WnAJIIA6kvnRZCf3R3PCHn/5P01CVEkFifdjAs2Qvb1bpfS9XhIWi3meahZZk8w8Yb2n58LdNBxyyvM1TdO9MTdqklSA7oPvu9kivfZrZspEI0zEXuQEvW8m52XAr3CbeZBhWEyaXiuHT9XNJpy51a6BFnvPgZWPwtulB/9WSHhSBGiE0OE+EzLlJCD62FembD3xUhPZJwLlCT9jDt3iJh0tdZTQyVt0GO775GnCAvTHOxMyeUaMekIpCPLEPpJs9IyLiex+lBPgslcOBLE+4HU0R1saUunLmCNJS2A4wVNC75chf+2aA7XFtSxb0o27mDNZlG1uC4gVa388qt1JUZMbHNgRUdAb3tMKRyd6WPVXScneacXfdxC7UEE89GmF0jV1psKCs1zO28WyN7Re23U/4nW0krLoL8aOLe0iRDSwhzYD8SLDa6LtnHPujyyaIa97q+WjESM+jKMtX83pr0+TUwFUgrTbkQMYAIoRBsOCcKZe0rM4Q48cZNhPbewhPoJWbAZ26zhyJNwdatQMf2OJsfCx9oYiQfM/82jQpJpleGsufefBX3aNQn01fQ7ZAM0qPQFRSvyc+X2ZG/DbsxsinLMj68f2Ixwc5HoBtINImPEOYKw 7gvwU2mf MMgFhUb6iqSI4RWsM2GIiVXVWOKOWB1i/8rMoElV7Fcih93/mO5IY6gUlh42IQjT8LN8Yq4Xc5Kwn3mkmUvJqTraAlOSuoXk9o60x55Jbm1gzoa4cnom0F3yqmTgO582rE8uEEqg+LTd/RGzyrwyNlWeouSPRLjQ8bHju/kfKAo/RCZPdjOvc+RvHW4Lx0YMjEOFYvIin3ZQhmSs2IrHEufvmt/EzjmZb0Q9ExGE2ZgKUk4o4pDo+mT3bqnLq51PiI7kxJ7wmr0foips8l2t2/vQFhRuUL1AqaJ28dYm/qCLZoLZrxyqR0ZuVWXheDuwAKPMxTj613WCKQZWa0d9nc4BbdOHhPNXXZpe6/fq8vQepNmYvpKJDdIjAi8hmdya/XddkYOpt8yTLoGT8HDbeqhzGSIJEsmOrG+34CmK6zTdiplmNZ+p7zqdvbZAjIIi5NuKwamGMVqdKBsE= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Rewrite xfile_obj_store to use xfile_get_page and xfile_put_page to access the data in the shmem page cache instead of abusing the shmem write_begin and write_end aops. Signed-off-by: Christoph Hellwig Reviewed-by: Darrick J. Wong --- fs/xfs/scrub/xfile.c | 66 ++++++++------------------------------------ 1 file changed, 11 insertions(+), 55 deletions(-) diff --git a/fs/xfs/scrub/xfile.c b/fs/xfs/scrub/xfile.c index 3ed7fb82a4497b..987b03df241b02 100644 --- a/fs/xfs/scrub/xfile.c +++ b/fs/xfs/scrub/xfile.c @@ -182,74 +182,30 @@ xfile_obj_store( size_t count, loff_t pos) { - struct inode *inode = file_inode(xf->file); - struct address_space *mapping = inode->i_mapping; - const struct address_space_operations *aops = mapping->a_ops; - struct page *page = NULL; - unsigned int pflags; - int error = 0; - if (count > MAX_RW_COUNT) return -ENOMEM; - if (inode->i_sb->s_maxbytes - pos < count) + if (file_inode(xf->file)->i_sb->s_maxbytes - pos < count) return -ENOMEM; trace_xfile_obj_store(xf, pos, count); - pflags = memalloc_nofs_save(); while (count > 0) { - void *fsdata = NULL; - void *p, *kaddr; + struct page *page; unsigned int len; - int ret; len = min_t(ssize_t, count, PAGE_SIZE - offset_in_page(pos)); + page = xfile_get_page(xf, pos, len, XFILE_ALLOC); + if (IS_ERR(page)) + return -ENOMEM; + memcpy(page_address(page) + offset_in_page(pos), buf, len); + xfile_put_page(xf, page); - /* - * We call write_begin directly here to avoid all the freezer - * protection lock-taking that happens in the normal path. - * shmem doesn't support fs freeze, but lockdep doesn't know - * that and will trip over that. - */ - error = aops->write_begin(NULL, mapping, pos, len, &page, - &fsdata); - if (error) { - error = -ENOMEM; - break; - } - - /* - * xfile pages must never be mapped into userspace, so we skip - * the dcache flush. If the page is not uptodate, zero it - * before writing data. - */ - kaddr = page_address(page); - if (!PageUptodate(page)) { - memset(kaddr, 0, PAGE_SIZE); - SetPageUptodate(page); - } - p = kaddr + offset_in_page(pos); - memcpy(p, buf, len); - - ret = aops->write_end(NULL, mapping, pos, len, len, page, - fsdata); - if (ret < 0) { - error = -ENOMEM; - break; - } - - if (ret != len) { - error = -ENOMEM; - break; - } - - count -= ret; - pos += ret; - buf += ret; + count -= len; + pos += len; + buf += len; } - memalloc_nofs_restore(pflags); - return error; + return 0; } /* Find the next written area in the xfile data for a given offset. */