Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp212890pxb; Fri, 29 Oct 2021 08:30:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw9eaJn5lAvUD5HOkCELZdM0TNIblG5O2cUD2XdWtQ8iOFaISRbn0uP5SuRGj0dD4u8y8Xa X-Received: by 2002:a05:6638:3048:: with SMTP id u8mr8586676jak.103.1635521457051; Fri, 29 Oct 2021 08:30:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1635521457; cv=none; d=google.com; s=arc-20160816; b=tGwnL9QZ90JOF/T9Uh/dr3fC8nNeDmulDU8aPbIZKH8TG72Igle2A52whdkwDmv0LZ PxvA+7NGE+wY77HFidJVKCtWAUSng/U9FzxcYjj3jeSpTtKAZPWv1sZK1tHPwHdOVm/X NEJbf6D7Ey5/mpwOlLp+ni+Tcsj+xblRs+XaCXKK/a1LPAszK7CN1RZidhefzBJEpPSn QyA9Sbj5wNudpWvfZCh1+YX6lY+E8pSVRr4a6uRQmxEiZdGMTvZhlFcRkSMj8gsYO0DT m8gOrraCcBa+AhlJ+jILTRtMNeipzBteMCoEqn9MIvgFuyrMWWS5ie05ay4Y5JmRIQog vQ6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=j+jjhpaF0iHxa2whtmkK63dV+F2krZEWTi+O7xRW30c=; b=PdUGvhsNPLBJyBHE9Fsztw1Fd28tOyCC4aQ0kZcrqIdH7BWWgZ1Lr6iHMzRp/UeDG9 SmFXqw8fAon5G+6bc1Oy2cr0jUa280G6+c1LSGI6ix+BGcoxSIUqD2GjB0O96AuEl8uK y7DPe9w+u4KSzU1zRlTTtuxwQQmPPqSMHcGMyJoZXPcwWmeUhg0meFENErXC8v1ITmle TiTbo61fdnmUHM7lQzu5gqvRXhaQrlGToataxFA1qv3znaqRo6srs/hMq5fjf3B5OaTo YQ0F6Z3yqkINKuJO7dU43EGib5pZdXMRQ5HpmowiZwgt4d/1AwRX8ocDbVK+hbH/e6Eh eMHw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w4si9927769ilv.57.2021.10.29.08.30.45; Fri, 29 Oct 2021 08:30:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229928AbhJ2PbD (ORCPT + 99 others); Fri, 29 Oct 2021 11:31:03 -0400 Received: from www62.your-server.de ([213.133.104.62]:56324 "EHLO www62.your-server.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229527AbhJ2PbC (ORCPT ); Fri, 29 Oct 2021 11:31:02 -0400 Received: from sslproxy01.your-server.de ([78.46.139.224]) by www62.your-server.de with esmtpsa (TLSv1.3:TLS_AES_256_GCM_SHA384:256) (Exim 4.92.3) (envelope-from ) id 1mgTnm-000DRl-Hy; Fri, 29 Oct 2021 17:28:18 +0200 Received: from [85.1.206.226] (helo=linux.home) by sslproxy01.your-server.de with esmtpsa (TLSv1.3:TLS_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mgTnm-00091V-8q; Fri, 29 Oct 2021 17:28:18 +0200 Subject: Re: [PATCH bpf-next v3 1/4] libfs: move shmem_exchange to simple_rename_exchange To: Lorenz Bauer , viro@zeniv.linux.org.uk, Hugh Dickins , Andrew Morton , Alexei Starovoitov , Andrii Nakryiko Cc: mszeredi@redhat.com, gregkh@linuxfoundation.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, netdev@vger.kernel.org, bpf@vger.kernel.org References: <20211028094724.59043-1-lmb@cloudflare.com> <20211028094724.59043-2-lmb@cloudflare.com> From: Daniel Borkmann Message-ID: <0c957c87-cfd1-fceb-ce18-54274eee9fc2@iogearbox.net> Date: Fri, 29 Oct 2021 17:28:17 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.2 MIME-Version: 1.0 In-Reply-To: <20211028094724.59043-2-lmb@cloudflare.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Authenticated-Sender: daniel@iogearbox.net X-Virus-Scanned: Clear (ClamAV 0.103.3/26337/Fri Oct 29 10:19:12 2021) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/28/21 11:47 AM, Lorenz Bauer wrote: > Move shmem_exchange and make it available to other callers. > > Suggested-by: nit: Should say proper name, but we can fix it up while applying. Miklos, does the below look good to you? Would be good to have an ACK from fs folks before applying, please take a look if you have a chance. Thanks! > Signed-off-by: Lorenz Bauer > --- > fs/libfs.c | 24 ++++++++++++++++++++++++ > include/linux/fs.h | 2 ++ > mm/shmem.c | 24 +----------------------- > 3 files changed, 27 insertions(+), 23 deletions(-) > > diff --git a/fs/libfs.c b/fs/libfs.c > index 51b4de3b3447..1cf144dc9ed2 100644 > --- a/fs/libfs.c > +++ b/fs/libfs.c > @@ -448,6 +448,30 @@ int simple_rmdir(struct inode *dir, struct dentry *dentry) > } > EXPORT_SYMBOL(simple_rmdir); > > +int simple_rename_exchange(struct inode *old_dir, struct dentry *old_dentry, > + struct inode *new_dir, struct dentry *new_dentry) > +{ > + bool old_is_dir = d_is_dir(old_dentry); > + bool new_is_dir = d_is_dir(new_dentry); > + > + if (old_dir != new_dir && old_is_dir != new_is_dir) { > + if (old_is_dir) { > + drop_nlink(old_dir); > + inc_nlink(new_dir); > + } else { > + drop_nlink(new_dir); > + inc_nlink(old_dir); > + } > + } > + old_dir->i_ctime = old_dir->i_mtime = > + new_dir->i_ctime = new_dir->i_mtime = > + d_inode(old_dentry)->i_ctime = > + d_inode(new_dentry)->i_ctime = current_time(old_dir); > + > + return 0; > +} > +EXPORT_SYMBOL_GPL(simple_rename_exchange); > + > int simple_rename(struct user_namespace *mnt_userns, struct inode *old_dir, > struct dentry *old_dentry, struct inode *new_dir, > struct dentry *new_dentry, unsigned int flags) > diff --git a/include/linux/fs.h b/include/linux/fs.h > index e7a633353fd2..333b8af405ce 100644 > --- a/include/linux/fs.h > +++ b/include/linux/fs.h > @@ -3383,6 +3383,8 @@ extern int simple_open(struct inode *inode, struct file *file); > extern int simple_link(struct dentry *, struct inode *, struct dentry *); > extern int simple_unlink(struct inode *, struct dentry *); > extern int simple_rmdir(struct inode *, struct dentry *); > +extern int simple_rename_exchange(struct inode *old_dir, struct dentry *old_dentry, > + struct inode *new_dir, struct dentry *new_dentry); > extern int simple_rename(struct user_namespace *, struct inode *, > struct dentry *, struct inode *, struct dentry *, > unsigned int); > diff --git a/mm/shmem.c b/mm/shmem.c > index b5860f4a2738..a18dde3d3092 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c > @@ -2945,28 +2945,6 @@ static int shmem_rmdir(struct inode *dir, struct dentry *dentry) > return shmem_unlink(dir, dentry); > } > > -static int shmem_exchange(struct inode *old_dir, struct dentry *old_dentry, struct inode *new_dir, struct dentry *new_dentry) > -{ > - bool old_is_dir = d_is_dir(old_dentry); > - bool new_is_dir = d_is_dir(new_dentry); > - > - if (old_dir != new_dir && old_is_dir != new_is_dir) { > - if (old_is_dir) { > - drop_nlink(old_dir); > - inc_nlink(new_dir); > - } else { > - drop_nlink(new_dir); > - inc_nlink(old_dir); > - } > - } > - old_dir->i_ctime = old_dir->i_mtime = > - new_dir->i_ctime = new_dir->i_mtime = > - d_inode(old_dentry)->i_ctime = > - d_inode(new_dentry)->i_ctime = current_time(old_dir); > - > - return 0; > -} > - > static int shmem_whiteout(struct user_namespace *mnt_userns, > struct inode *old_dir, struct dentry *old_dentry) > { > @@ -3012,7 +2990,7 @@ static int shmem_rename2(struct user_namespace *mnt_userns, > return -EINVAL; > > if (flags & RENAME_EXCHANGE) > - return shmem_exchange(old_dir, old_dentry, new_dir, new_dentry); > + return simple_rename_exchange(old_dir, old_dentry, new_dir, new_dentry); > > if (!simple_empty(new_dentry)) > return -ENOTEMPTY; >