From patchwork Fri Aug 10 22:00:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrey Vagin X-Patchwork-Id: 10563193 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A16301804 for ; Fri, 10 Aug 2018 22:00:33 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8D6202B412 for ; Fri, 10 Aug 2018 22:00:33 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 820042B46B; Fri, 10 Aug 2018 22:00:33 +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=-7.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham 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 8B7992B412 for ; Fri, 10 Aug 2018 22:00:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726774AbeHKAcN (ORCPT ); Fri, 10 Aug 2018 20:32:13 -0400 Received: from mail-pf1-f195.google.com ([209.85.210.195]:39897 "EHLO mail-pf1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726708AbeHKAcN (ORCPT ); Fri, 10 Aug 2018 20:32:13 -0400 Received: by mail-pf1-f195.google.com with SMTP id j8-v6so5113263pff.6 for ; Fri, 10 Aug 2018 15:00:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id; bh=kR3UNf/3Y2Q/FS1WTEBwHur0pTyuxnbBWm8fv/licyo=; b=jmUUDxvftv0+9Ny5RMFgUNNsZAcpnubFmPmyPgraX/Uw4x1RhqTr+FduCPi/fGRzNc OvY7wFiem8lQzyBihR//cqandWJY+cT+DHwZwilTD4gi66WjabF1eCB0UTiNhYdg+0Ar iXo8mdWRMouMWU++R5AGiDRcQj0h2hwOYbA5co7HY48ZbbAdxe7sMS1FJtiSEqrN/sqx Qh9vuSYve9bDMtdTUEz6jhM/MSR+oQSwfn+tP1atj7t6zyesseZ7hoW4/3stZPPXO++2 OCMTP8ocb5i1unG3MWgUfL0wQYt+4+Od118FUndSf7wseehm1wn8A+D0gBI+925u/sY+ FmVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=kR3UNf/3Y2Q/FS1WTEBwHur0pTyuxnbBWm8fv/licyo=; b=dDfaTN1oCvPCzyaHZKrV2k1JS4MFdlD+0E+BZqvTyH38CSMxkU0bFY2mS855tUEQM6 qcS985XChuk5pCZswQIpUbdFkTCFSe53MkjbXseUShKg9EKYv8gJbPEm+40+tMILytYr 1vqpuHcA+/MCuPUCQ6FJQdfOKiT4cb9IH2O75Le+QQgGfhB3qF0WkGJ75EgnA8Vd45K3 nAIeSsNoDJAGorM2tow4j2YuWJyMdHFoB7Ecp15cC8VyojPsBr1AHJrcOyOe5YUrV5We jmy1VPEGCBMA66srf+yH9kYUT78SVIThlhPPkTL+7Bq2n5t/KPIsNH4N4VmGs5WxZYt4 C2oQ== X-Gm-Message-State: AOUpUlFpYp1P+8c0FqOsXayzE+cgwo84UaAvji2NbhvbrNW5ODVPZCEr IbwHnSW2DJYEhRsebdY6n8I= X-Google-Smtp-Source: AA+uWPwsJr+46eAoSn1b3uFo/d7xWkGdjj34Gl+rl2W4Rhp2C9H8fVXeDScDRCHLbsKfanYMn3sbhA== X-Received: by 2002:a62:5302:: with SMTP id h2-v6mr8814355pfb.183.1533938430336; Fri, 10 Aug 2018 15:00:30 -0700 (PDT) Received: from localhost.localdomain ([4.16.175.162]) by smtp.gmail.com with ESMTPSA id d81-v6sm19203319pfj.122.2018.08.10.15.00.29 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 10 Aug 2018 15:00:29 -0700 (PDT) From: Andrei Vagin To: David Howells Cc: linux-fsdevel@vger.kernel.org, Andrei Vagin Subject: [PATCH dhowells/mount-api 1/2] fs/fsconfig: handle FSCONFIG_CMD_RECONFIGURE Date: Fri, 10 Aug 2018 15:00:26 -0700 Message-Id: <20180810220027.2735-1-avagin@openvz.org> X-Mailer: git-send-email 2.17.1 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 From: Andrei Vagin It looks like everything is already prepared for that and we only need to call do_remount_sb() to apply changes from fs_context. Signed-off-by: Andrei Vagin Signed-off-by: David Howells --- fs/fsopen.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/fs/fsopen.c b/fs/fsopen.c index e79bb5b085d6..6991230a7b59 100644 --- a/fs/fsopen.c +++ b/fs/fsopen.c @@ -273,7 +273,25 @@ static int vfs_fsconfig_action(struct fs_context *fc, enum fsconfig_command cmd) else fc->phase = FS_CONTEXT_FAILED; return ret; + case FSCONFIG_CMD_RECONFIGURE: + { + struct super_block *sb; + + if (fc->phase != FS_CONTEXT_RECONF_PARAMS) + return -EBUSY; + fc->phase = FS_CONTEXT_RECONFIGURING; + sb = fc->root->d_sb; + down_write(&sb->s_umount); + ret = do_remount_sb(sb, 0, NULL, 0, 0, fc); + up_write(&sb->s_umount); + + if (ret == 0) + fc->phase = FS_CONTEXT_CREATE_PARAMS; + else + fc->phase = FS_CONTEXT_FAILED; + return ret; + } default: return -EOPNOTSUPP; } From patchwork Fri Aug 10 22:00:27 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrey Vagin X-Patchwork-Id: 10563195 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0821513B4 for ; Fri, 10 Aug 2018 22:00:35 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EC31D2B411 for ; Fri, 10 Aug 2018 22:00:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E02602B4E7; Fri, 10 Aug 2018 22:00:34 +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=-7.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham 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 63D672B411 for ; Fri, 10 Aug 2018 22:00:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726944AbeHKAcQ (ORCPT ); Fri, 10 Aug 2018 20:32:16 -0400 Received: from mail-pg1-f193.google.com ([209.85.215.193]:35729 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726708AbeHKAcP (ORCPT ); Fri, 10 Aug 2018 20:32:15 -0400 Received: by mail-pg1-f193.google.com with SMTP id w10-v6so4985847pgv.2 for ; Fri, 10 Aug 2018 15:00:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=VMWwPsOTsAhp+sik7h75zfc+Bm7pZwOSqqNowgoG34s=; b=N/KN+IdnBjMUyxSM1tBMo24O5MYd0ztKUCeRPLOKOT7wBgDMx1azMJKbzlbPqvOs4l Akru9NNwJPeKuCdT1kFr//PuxAMBaJ0O6Zrb5JR6dYMt2jym3hcfTndHFsNM3befZ/ZN HkfQnbYdg69lYahupLCzfmqTv1aeS6sN5+y+TcqIS639Khrt0gmVyqVD9RyhChjHP2l1 cNAchQtdIxDbrYp+xUOap/gXQfGBHQIRmDraOsBBUMj6ocEAxgTfIMm/XAIE9DlVGkOg ouWUw0xbxYDWdvlClob6JTTYsEEEZt42F8k9crlVVGIdxm0n8Cqw86+rf+4IGBcwAz+u 1wbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=VMWwPsOTsAhp+sik7h75zfc+Bm7pZwOSqqNowgoG34s=; b=o8zYJbQgX/nAZeo2w6ChTVYqhRRO6B+Hb3TlDYQtIdMIN9IxkVSePKBbkrVFEzRxNb KfdW+Cva0VPEgIJuSGcWXNXlajsoEXkQF23GTH+tefYhA7tpYggqER8VNKQTbrkz3gRw rTDejHQcZT7nyfJ+tUqfoDrealwqe2koAPFQCtqrUPfWBg94E7YdJgrgqJeCOWzFsfpj kH0hGklgkc9SFbDIDvn0gm/uK3eOHrcOU7RaFDfeKXLr3kV5nQ0KozX6kokmM9XWOmkR jLwYyBA3yy6xB8wD74uNZwjzuNIGUyjdBEomZe8jTC7arVgNBc8GlkQSSrJDQTy+fRcS 814Q== X-Gm-Message-State: AOUpUlFmU9gMcS+3MYv69qLDLXJ0mMzaSRM2bk06rZerOipObsHGEU8h HH3Ac+VMdae9Q+ecOtDyf24= X-Google-Smtp-Source: AA+uWPxOn4bPu3HVlV5/6zyemxgG9URdIf/Fftr+9bRjtxpAIFPDV/QPZerxu+un69Fd3n6m/9MJLw== X-Received: by 2002:a62:455b:: with SMTP id s88-v6mr8770943pfa.203.1533938430989; Fri, 10 Aug 2018 15:00:30 -0700 (PDT) Received: from localhost.localdomain ([4.16.175.162]) by smtp.gmail.com with ESMTPSA id d81-v6sm19203319pfj.122.2018.08.10.15.00.30 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 10 Aug 2018 15:00:30 -0700 (PDT) From: Andrei Vagin To: David Howells Cc: linux-fsdevel@vger.kernel.org, Andrei Vagin Subject: [PATCH dhowells/mount-api 2/2] selftests: implement a test for a new mount API Date: Fri, 10 Aug 2018 15:00:27 -0700 Message-Id: <20180810220027.2735-2-avagin@openvz.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180810220027.2735-1-avagin@openvz.org> References: <20180810220027.2735-1-avagin@openvz.org> 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 From: Andrei Vagin Currently, a reconfigure call-back is implemented only for the proc file system. This test creates a new mount and pid namespace and then we can create a new proc mount instance and be sure that a host configuration will not be affected. Signed-off-by: Andrei Vagin Signed-off-by: Andrei Vagin --- tools/testing/selftests/fsopen/Makefile | 5 + tools/testing/selftests/fsopen/config | 2 + tools/testing/selftests/fsopen/fsopen.c | 120 ++++++++++++++++++++++++ 3 files changed, 127 insertions(+) create mode 100644 tools/testing/selftests/fsopen/Makefile create mode 100644 tools/testing/selftests/fsopen/config create mode 100644 tools/testing/selftests/fsopen/fsopen.c diff --git a/tools/testing/selftests/fsopen/Makefile b/tools/testing/selftests/fsopen/Makefile new file mode 100644 index 000000000000..bfb1dd015e37 --- /dev/null +++ b/tools/testing/selftests/fsopen/Makefile @@ -0,0 +1,5 @@ +CFLAGS = -Wall -I ../../../../usr/include $(EXTRA_CFLAGS) + +TEST_GEN_PROGS := fsopen + +include ../lib.mk diff --git a/tools/testing/selftests/fsopen/config b/tools/testing/selftests/fsopen/config new file mode 100644 index 000000000000..d2ced6498f5a --- /dev/null +++ b/tools/testing/selftests/fsopen/config @@ -0,0 +1,2 @@ +CONFIG_PROC_FS=y +CONFIG_PID_NS=y diff --git a/tools/testing/selftests/fsopen/fsopen.c b/tools/testing/selftests/fsopen/fsopen.c new file mode 100644 index 000000000000..c7cbfcda40ad --- /dev/null +++ b/tools/testing/selftests/fsopen/fsopen.c @@ -0,0 +1,120 @@ +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +static int sys_mount(char *dev_name, char *dir_name, char *type, + unsigned long flags, void *data) +{ + return syscall(__NR_mount, dev_name, dir_name, type, flags, data); +} + +static int sys_fsopen(const char *fs_name, unsigned int flags) +{ + return syscall(__NR_fsopen, fs_name, flags); +} + +static int sys_fsmount(int fsfd, unsigned int flags, unsigned int ms_flags) +{ + return syscall(__NR_fsmount, fsfd, flags, ms_flags); +} + +static int sys_fspick(unsigned int dirfd, const char *path, unsigned int flags) +{ + return syscall(__NR_fspick, dirfd, path, flags); +} + +static int sys_fsconfig(int fd, unsigned int cmd, const char *key, const char *value, int aux) +{ + return syscall(__NR_fsconfig, fd, cmd, key, value, aux); +} + +static int move_mount(int from_dfd, char *from_pathname, + int to_dfd, char *to_pathname, unsigned int flags) +{ + return syscall(__NR_move_mount, from_dfd, from_pathname, to_dfd, to_pathname, flags); +} + +#define pr_err(fmt, ...) \ + ({ \ + fprintf(stderr, "%s:%d:" fmt ": %m\n", \ + __func__, __LINE__, ##__VA_ARGS__); \ + 1; \ + }) + +static const char dev[] = "s test_fsopen_123"; +//static const char opts[] = "rw"; +static int test() +{ + int fsfd, fsfd2, dfd; + + fsfd = sys_fsopen("proc", 0); + if (fsfd < 0) + return pr_err("sys_fsopen"); + + if (sys_fsconfig(fsfd, FSCONFIG_SET_STRING, "gid", "0", 0)) + return pr_err("sys_fsconfig sets gid=5"); + + if (sys_fsconfig(fsfd, FSCONFIG_SET_STRING, "source", dev, 0) < 0) + return pr_err("fsconfig_set_string sets source = %s", dev); + + if (sys_fsconfig(fsfd, FSCONFIG_CMD_CREATE, NULL, NULL, 0) < 0) + return pr_err("fsconfig_cmd_create"); + + dfd = sys_fsmount(fsfd, 0, 0); + if (dfd < 0) + return pr_err("sys_fsmount"); + + if (move_mount(dfd, ".", AT_FDCWD, "/proc", 0)) + return pr_err("move_mount"); + + fsfd2 = sys_fspick(dfd, ".", 0); + if (fsfd2 < 0) + return pr_err("sys_fspick"); + + if (sys_fsconfig(fsfd2, FSCONFIG_SET_STRING, "gid", "5", 0)) + return pr_err("fsconfig_set_string sets gid=5"); + + if (sys_fsconfig(fsfd2, FSCONFIG_CMD_RECONFIGURE, NULL, NULL, 0)) + return pr_err("fsconfig_cmd_reconfigure"); + + if (close(dfd) < 0) + return pr_err("close(dfd)"); + if (close(fsfd) < 0) + return pr_err("close(fsfd)"); + if (close(fsfd2) < 0) + return pr_err("close(fsfd2)"); + + return 0; +} + +int main() +{ + pid_t pid; + int status; + + if (unshare(CLONE_NEWNS | CLONE_NEWPID)) + return pr_err("unshare"); + + if (sys_mount(NULL, "/", NULL, MS_PRIVATE | MS_REC, NULL)) + return pr_err("mount"); + + pid = fork(); + if (pid < 0) + return pr_err("fork"); + if (pid == 0) + return test(); + if (waitpid(pid, &status, 0) != pid) + return pr_err("waitpid"); + if (status) + return 1; + return 0; +}