Received: by 2002:a25:e74b:0:0:0:0:0 with SMTP id e72csp2400138ybh; Fri, 24 Jul 2020 11:45:46 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwC2q4s81gUdSbsccbutCaJj5vKS2iGjprExvEy37GKLnoOSz5gl3pkgs9qsJIGAdwXHmiE X-Received: by 2002:a50:8f83:: with SMTP id y3mr10353764edy.257.1595616346294; Fri, 24 Jul 2020 11:45:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1595616346; cv=none; d=google.com; s=arc-20160816; b=CIt5qGVJBDizRiZboxF+YDH0hI9JV3Hvi66CGyVsJ3howIWUuKtjCV7BaxyHBfEHib i4fCqt+zwR3pQ1kcEBdUJchX8I30KAshqIoI5uOKTa2u12BYvtljdQCSTeQTefm2x+fv e3AgvStd6bmoAIpsefbIuw8MtnCuj6Gc56orbKOzxvNwX7b8WHk9NxPKUhLXTF5Ucxwa HKPe3AB86CKABHk6n2/mruLyuycuG01zOaglgXN0nMmKbw3uhpg/e1rYKA2fbhRymaIT A6zLL1q15hWrUa/TQxQk7FgWv4HM3/JDpcWELtHw7NRvISHu/6jduNg2ByM3Rh3uxfLW NOwA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:from:subject:references :mime-version:message-id:in-reply-to:date:dkim-signature; bh=VSwfu85pneIFmS24X/ynlOi1yjIof1V3mRCitL8rAYY=; b=AkunfQ7zyplxUKux5D6GoG4ncRX3tvnn38GIzTmFWzB+Wic+dO+krKwgCAp/qamgtT qUvShqO/KzDwy/l4lVUIgq+nvWIBcBKAG4NFiclAGqgQsXlRxm4a8ebqKj41mn1x/kKg 68QvDNxdUREmSmRcwNX0xRFqeM5Fo0Zz9DIhiUR4q2EjxnIZ5zEkAlo9TZ6KP2n65zQ2 LKRG1fymTJhMtca1lLjPn7FXt4fZsrCh1VNe2Wp60M6cYoSnWAF1zkPpOs64NQOaE3O5 vaVkVlKUzmGsTO4oAweDNxmFCF1yxAynh4CEpbNB2urLSldAWFjbXaY+sK6uTYUNXnku 3hMQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=maAmxJ7N; spf=pass (google.com: domain of linux-ext4-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-ext4-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a8si1039469edr.123.2020.07.24.11.45.16; Fri, 24 Jul 2020 11:45:46 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-ext4-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=maAmxJ7N; spf=pass (google.com: domain of linux-ext4-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-ext4-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726739AbgGXSpL (ORCPT + 99 others); Fri, 24 Jul 2020 14:45:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59018 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726676AbgGXSpK (ORCPT ); Fri, 24 Jul 2020 14:45:10 -0400 Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DE892C05BD0F for ; Fri, 24 Jul 2020 11:45:09 -0700 (PDT) Received: by mail-pj1-x104a.google.com with SMTP id a6so6041243pjd.4 for ; Fri, 24 Jul 2020 11:45:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=VSwfu85pneIFmS24X/ynlOi1yjIof1V3mRCitL8rAYY=; b=maAmxJ7NYpOeYwEieVBxCvRDZINBI5z01Z7yoA6Kvl2IYqByL1XVGCthlTgPirzHTR 5nXxBJvJ9Wt7KA1zuGzaQDvSG5JBu4jne2azUTlVKbGojdVvR/GsCiiOGhYZfls55xX+ vb7IqBleMcL/eF/RiTCPxqdypPn2KKzoMLJ6OlgoiFw2wmrMpqEd0oGoa/cAUN16dbVJ mbvl5Pjm/9rEEPXF1iygFadnE/pcA3dJdwaWGdx4RU8aeSSpToh7gK1ay2iYWIqrnIqQ wGwk93dF3mWAgl2urxtmiGQyZwx8qsrDPbHwP4m2RhCl25zv7XND4Kaft04Xv2XS6LU/ rOrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=VSwfu85pneIFmS24X/ynlOi1yjIof1V3mRCitL8rAYY=; b=jq1eIkjNQSIJjNTfdNI4Q2fKRs9JPI1Ddxm80JGNZM4M0s0DjL4ptUpa2AB2HMTb8V n1Toj+Od12qSZwEpXCPWqbPnT1fTtmJNL+ohIz3oWUY7VuFf5obXgA6rKlyqM4CnLt2Z RvrhFXiYgujj+/QCSwPLF00D+aAsiRYoNetvsZVSNEgqgCRAx/CChmNvEzENOlq3ege0 C+hD7aLaMV/QmLKrhKZlHzokSSq7uDhG8HkX175XNFZ+7DCpuaeZflvTB8MSqtvK0TkJ 3wFm/GaKxKJ3FSI0YRfabLmw6QyagJRr3G2wEyxPg8W2nfEHh0XJ3q/DHBFsNhI2tiK5 5qDA== X-Gm-Message-State: AOAM532EdnIXr/V14q46E5OxQKC+9Lkw2qBUlwYLxPPkZ2i7Y43hSoeB LUSqyFOsAfINpXaphjId1HbS04S9z6k= X-Received: by 2002:a17:90b:1296:: with SMTP id fw22mr6730717pjb.20.1595616309435; Fri, 24 Jul 2020 11:45:09 -0700 (PDT) Date: Fri, 24 Jul 2020 18:44:56 +0000 In-Reply-To: <20200724184501.1651378-1-satyat@google.com> Message-Id: <20200724184501.1651378-3-satyat@google.com> Mime-Version: 1.0 References: <20200724184501.1651378-1-satyat@google.com> X-Mailer: git-send-email 2.28.0.rc0.142.g3c755180ce-goog Subject: [PATCH v6 2/7] direct-io: add support for fscrypt using blk-crypto From: Satya Tangirala To: linux-fscrypt@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, linux-ext4@vger.kernel.org Cc: linux-xfs@vger.kernel.org, Eric Biggers , Satya Tangirala , Jaegeuk Kim Content-Type: text/plain; charset="UTF-8" Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org From: Eric Biggers Set bio crypt contexts on bios by calling into fscrypt when required, and explicitly check for DUN continuity when adding pages to the bio. (While DUN continuity is usually implied by logical block contiguity, this is not the case when using certain fscrypt IV generation methods like IV_INO_LBLK_32). Signed-off-by: Eric Biggers Co-developed-by: Satya Tangirala Signed-off-by: Satya Tangirala Reviewed-by: Jaegeuk Kim --- fs/direct-io.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/fs/direct-io.c b/fs/direct-io.c index 6d5370eac2a8..f27f7e3780ee 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -411,6 +412,7 @@ dio_bio_alloc(struct dio *dio, struct dio_submit *sdio, sector_t first_sector, int nr_vecs) { struct bio *bio; + struct inode *inode = dio->inode; /* * bio_alloc() is guaranteed to return a bio when allowed to sleep and @@ -418,6 +420,9 @@ dio_bio_alloc(struct dio *dio, struct dio_submit *sdio, */ bio = bio_alloc(GFP_KERNEL, nr_vecs); + fscrypt_set_bio_crypt_ctx(bio, inode, + sdio->cur_page_fs_offset >> inode->i_blkbits, + GFP_KERNEL); bio_set_dev(bio, bdev); bio->bi_iter.bi_sector = first_sector; bio_set_op_attrs(bio, dio->op, dio->op_flags); @@ -782,9 +787,17 @@ static inline int dio_send_cur_page(struct dio *dio, struct dio_submit *sdio, * current logical offset in the file does not equal what would * be the next logical offset in the bio, submit the bio we * have. + * + * When fscrypt inline encryption is used, data unit number + * (DUN) contiguity is also required. Normally that's implied + * by logical contiguity. However, certain IV generation + * methods (e.g. IV_INO_LBLK_32) don't guarantee it. So, we + * must explicitly check fscrypt_mergeable_bio() too. */ if (sdio->final_block_in_bio != sdio->cur_page_block || - cur_offset != bio_next_offset) + cur_offset != bio_next_offset || + !fscrypt_mergeable_bio(sdio->bio, dio->inode, + cur_offset >> dio->inode->i_blkbits)) dio_bio_submit(dio, sdio); } -- 2.28.0.rc0.142.g3c755180ce-goog