Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp3500088imm; Tue, 29 May 2018 08:16:02 -0700 (PDT) X-Google-Smtp-Source: ADUXVKI8ZujdzliA/grVnR7BkEcLmJcn9L+f7+8bBh7mGOMIYAVH0CWOSJ6oPCf1scgTSplS590f X-Received: by 2002:a17:902:b110:: with SMTP id q16-v6mr4866499plr.286.1527606962731; Tue, 29 May 2018 08:16:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527606962; cv=none; d=google.com; s=arc-20160816; b=S0UDrbvTdTdqhp18FAwNj/mwcXbjaq/YMb59KK0m8C3L+Tl6GBEBq2PJ2dBZ62qV2E NEbGW9dd5eOsn8NycLXCX5CYOy4uzAWsXEE+Hdt9GFZwHXxxxPK4a3wnR6f7dYu044/N Sv7T0vAtCsd4Hr0UcXClxgVdzz71YzZc4Kf4orDsAMd2zaOWv7Y0OoZeuUMmrHTST9Tv Yl6UP1cpo8oC8merT+hG01n/WPP0AoU6RKSAT2+kgmSzLKE47DcSGyoomP74bfWipjSn Etlj60HcllqwWzwiUKhLXiyfHHq4MOSsM28DJcoXG5nuBQtL1drG5dv7vvQY3tSE8fEc m0dQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=3z5BGnZ1dMsqKneG2l6CPh5OVWM/P4fbH813ml2k080=; b=ftYHScg0MXWO9r2gIbwd3NVNKpPzHhHaCAf+Eu0UbtiBF9Ht7jEtoWL8G73mBeiRpU 10TbzL2UaexymkZ8z3TmgAUEjmbD7spECLFfogCkpruG9bm9xIJK8tumXNeyTqPsdO1z MeHB9meBXlqSd+kzYEySO55cX4Fr20cjSL+CbUQGgPlh6HQx2FWeXXZIxvhfUPQaD6zj 82j9GY2yIkx0NV/7Yf/9au6tDhB/KqwHWwYSDmQMwXg1JR6avYhwOI5OhgiZfnWRoQnV MHAbhExahfpCNZj/JdoXWVuhoeAlp4KRYA67ywlMcO1dSAlT77VKSz9WH7vV2c2K1tO8 HBLQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y1-v6si13635441pgv.36.2018.05.29.08.15.48; Tue, 29 May 2018 08:16:02 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964820AbeE2PNV (ORCPT + 99 others); Tue, 29 May 2018 11:13:21 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:53870 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935207AbeE2OoC (ORCPT ); Tue, 29 May 2018 10:44:02 -0400 Received: by mail-wm0-f68.google.com with SMTP id a67-v6so41192356wmf.3 for ; Tue, 29 May 2018 07:44:02 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=3z5BGnZ1dMsqKneG2l6CPh5OVWM/P4fbH813ml2k080=; b=MwQVqG9+ww8l8Q6ettmWIlTydE9UTWaqOvIRncnfWaTA093SKTPDUrAwugk9LbU8fd KKMdJc9AEF1hvnTlYTwj8P5pDOz810SH2Ei5VND30cxWl4NFgT1ki2xNDtSXh5P0HI0o SO6Llhg5dNqOa7gB9JUwHutWblBjIlF124mIYHlUrOHo46/aNMOPuXsjPj1a/TO4GVUh tr2+6eaV6SdbHwUmihLvUN0bQuYlUvBKmOUl7FKqv58OGm/ALx1dvME5JGCEfS32EUFU 4pPdyfOg//Qhp8agC0N79+6QWzDMKW3xVfxZbbiF1Z3PhBLeFCE+kw6CDXiK19ZUHKS4 aS2w== X-Gm-Message-State: ALKqPwd/gj1aluTrR9FefiLwr2Q73PsCwir5D7Gjz2ZqCC1a7KrIlZfm K15L5N6cWM52jHfHxN21F4bGGw== X-Received: by 2002:a1c:16ca:: with SMTP id 193-v6mr11115297wmw.37.1527605041524; Tue, 29 May 2018 07:44:01 -0700 (PDT) Received: from veci.piliscsaba.redhat.com (catv-176-63-54-97.catv.broadband.hu. [176.63.54.97]) by smtp.gmail.com with ESMTPSA id t198-v6sm18834422wmt.23.2018.05.29.07.44.00 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 29 May 2018 07:44:00 -0700 (PDT) From: Miklos Szeredi To: linux-unionfs@vger.kernel.org Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 17/39] ovl: add ovl_write_iter() Date: Tue, 29 May 2018 16:43:17 +0200 Message-Id: <20180529144339.16538-18-mszeredi@redhat.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180529144339.16538-1-mszeredi@redhat.com> References: <20180529144339.16538-1-mszeredi@redhat.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Implement stacked writes. Signed-off-by: Miklos Szeredi --- fs/overlayfs/file.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c index bbc40a14acf8..a7af56861aa5 100644 --- a/fs/overlayfs/file.c +++ b/fs/overlayfs/file.c @@ -195,9 +195,48 @@ static ssize_t ovl_read_iter(struct kiocb *iocb, struct iov_iter *iter) return ret; } +static ssize_t ovl_write_iter(struct kiocb *iocb, struct iov_iter *iter) +{ + struct file *file = iocb->ki_filp; + struct inode *inode = file_inode(file); + struct fd real; + const struct cred *old_cred; + ssize_t ret; + + if (!iov_iter_count(iter)) + return 0; + + inode_lock(inode); + /* Update mode */ + ovl_copyattr(ovl_inode_real(inode), inode); + ret = file_remove_privs(file); + if (ret) + goto out_unlock; + + ret = ovl_real_fdget(file, &real); + if (ret) + goto out_unlock; + + old_cred = ovl_override_creds(file_inode(file)->i_sb); + ret = vfs_iter_write(real.file, iter, &iocb->ki_pos, + ovl_iocb_to_rwf(iocb)); + revert_creds(old_cred); + + /* Update size */ + ovl_copyattr(ovl_inode_real(inode), inode); + + fdput(real); + +out_unlock: + inode_unlock(inode); + + return ret; +} + const struct file_operations ovl_file_operations = { .open = ovl_open, .release = ovl_release, .llseek = ovl_llseek, .read_iter = ovl_read_iter, + .write_iter = ovl_write_iter, }; -- 2.14.3