Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp3454579imm; Tue, 29 May 2018 07:32:50 -0700 (PDT) X-Google-Smtp-Source: AB8JxZr0/iomVAjloIN/ZgtovEs36OOEOXjko3hiZK5cRrHipIBCaPOycqA1jWqV1Z/kxyuZQbBv X-Received: by 2002:a63:41c4:: with SMTP id o187-v6mr13664338pga.7.1527604369961; Tue, 29 May 2018 07:32:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527604369; cv=none; d=google.com; s=arc-20160816; b=XdVO3nTHhlSXQ1KnBqv1DejUzN72catHS2AvmaMo8FdqnUasTXK7jlwYVdVldgwHSC qutefvXRR/4ko4TsF/DgzLml7dP0LUQhZa1bAwl/TVWOPCZDlKhTbhw0xI9U/0PyrVfD QpXRjTp598ZMnWw5Yj9f4ClYcUGKIln5IzQfx1VJ3peAd57FfskbGBU35NCd9Q7ffOAw b6umauqpC7yIibdUOY5iWXTCZin1wMWdwi/3yD+m3ltG62sZEb1Cup4jZsIPO7GvrmK1 nKqf+lvz+jt1m7FTmqfrGI377/c83cucfN6HDcbtfWSUwXM25C/WPFW3y+jiOGM8clyR 6qLQ== 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=f4sl+pMWVfKkePZSGRZ+nh7p3kydWstXZLFUuLzxC8Q=; b=RZsmigkLXB+OfurNqhTPeCDwB9ikpTFgkQn7BqDuGbr4a83XWNqhhbmojpAMmKm9OP hbxdr4ZvdIEt9Hzt12BNTZNBNOugWGK0g1DDmyUUAx5KQ0CwzuA+iYF/K3hZznnKllgi cIdGc02Q2K9cpI8mCA1/5ycT1X8ji4REL26wTHdXl6baBcyppjB1drYp2inkgeQxzXJn e0jy5avEd1D0xoAB/s+GR6k3yc/pk9QE2w2QLLjQCXXiFTOiSiVCFWViqF7D3nvT0B7x 7hGIv4lxRxB9tUHb7klZrywKWJHT8KdBDnQqbKeG5+Nn6MONV8WWNX0BPqj/GL9+K7Fm fX5Q== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l4-v6si7983543pgq.65.2018.05.29.07.32.36; Tue, 29 May 2018 07:32:49 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935019AbeE2OV5 (ORCPT + 99 others); Tue, 29 May 2018 10:21:57 -0400 Received: from smtp4.ccs.ornl.gov ([160.91.203.40]:38132 "EHLO smtp4.ccs.ornl.gov" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934304AbeE2OVx (ORCPT ); Tue, 29 May 2018 10:21:53 -0400 Received: from star.ccs.ornl.gov (star.ccs.ornl.gov [160.91.202.134]) by smtp4.ccs.ornl.gov (Postfix) with ESMTP id C2F871005270; Tue, 29 May 2018 10:21:49 -0400 (EDT) Received: by star.ccs.ornl.gov (Postfix, from userid 2004) id BD07F2CD; Tue, 29 May 2018 10:21:49 -0400 (EDT) From: James Simmons To: Greg Kroah-Hartman , devel@driverdev.osuosl.org, Andreas Dilger , Oleg Drokin , NeilBrown Cc: Linux Kernel Mailing List , Lustre Development List , Dmitry Eremin , "John L. Hammond" , James Simmons , James Simmons Subject: [PATCH v2 2/6] staging: lustre: llite: add support set_acl method in inode operations Date: Tue, 29 May 2018 10:21:41 -0400 Message-Id: <1527603705-30450-3-git-send-email-jsimmons@infradead.org> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1527603705-30450-1-git-send-email-jsimmons@infradead.org> References: <1527603705-30450-1-git-send-email-jsimmons@infradead.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Dmitry Eremin Linux kernel v3.14 adds set_acl method to inode operations. This patch adds support to Lustre for proper acl management. Signed-off-by: Dmitry Eremin Signed-off-by: John L. Hammond Signed-off-by: James Simmons Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-9183 Reviewed-on: https://review.whamcloud.com/25965 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-10541 Reviewed-on: https://review.whamcloud.com/31588 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-10926 Reviewed-on: https://review.whamcloud.com/32045 Reviewed-by: Bob Glossman Reviewed-by: James Simmons Reviewed-by: Andreas Dilger Reviewed-by: Dmitry Eremin Reviewed-by: Oleg Drokin Signed-off-by: James Simmons --- Changelog: v1) Initial ported patch v2) Updated patch with fixes that address issues pointed out by Can Carpenter v3) Rebased to contain new code in acl.c drivers/staging/lustre/lustre/llite/acl.c | 57 ++++++++++++++++++++++ .../staging/lustre/lustre/llite/llite_internal.h | 2 + 2 files changed, 59 insertions(+) diff --git a/drivers/staging/lustre/lustre/llite/acl.c b/drivers/staging/lustre/lustre/llite/acl.c index d7c3bf9..de1499b 100644 --- a/drivers/staging/lustre/lustre/llite/acl.c +++ b/drivers/staging/lustre/lustre/llite/acl.c @@ -49,3 +49,60 @@ struct posix_acl *ll_get_acl(struct inode *inode, int type) return acl; } + +int ll_set_acl(struct inode *inode, struct posix_acl *acl, int type) +{ + struct ll_sb_info *sbi = ll_i2sbi(inode); + struct ptlrpc_request *req = NULL; + const char *name = NULL; + size_t value_size = 0; + char *value = NULL; + int rc = 0; + + switch (type) { + case ACL_TYPE_ACCESS: + name = XATTR_NAME_POSIX_ACL_ACCESS; + if (acl) + rc = posix_acl_update_mode(inode, &inode->i_mode, &acl); + break; + + case ACL_TYPE_DEFAULT: + name = XATTR_NAME_POSIX_ACL_DEFAULT; + if (!S_ISDIR(inode->i_mode)) + rc = acl ? -EACCES : 0; + break; + + default: + rc = -EINVAL; + break; + } + if (rc) + return rc; + + if (acl) { + value_size = posix_acl_xattr_size(acl->a_count); + value = kmalloc(value_size, GFP_NOFS); + if (!value) { + rc = -ENOMEM; + goto out; + } + + rc = posix_acl_to_xattr(&init_user_ns, acl, value, value_size); + if (rc < 0) + goto out_value; + } + + rc = md_setxattr(sbi->ll_md_exp, ll_inode2fid(inode), + value ? OBD_MD_FLXATTR : OBD_MD_FLXATTRRM, + name, value, value_size, 0, 0, 0, &req); + + ptlrpc_req_finished(req); +out_value: + kfree(value); +out: + if (rc) + forget_cached_acl(inode, type); + else + set_cached_acl(inode, type, acl); + return rc; +} diff --git a/drivers/staging/lustre/lustre/llite/llite_internal.h b/drivers/staging/lustre/lustre/llite/llite_internal.h index bdb1564..c08a6e1 100644 --- a/drivers/staging/lustre/lustre/llite/llite_internal.h +++ b/drivers/staging/lustre/lustre/llite/llite_internal.h @@ -756,8 +756,10 @@ int ll_getattr(const struct path *path, struct kstat *stat, u32 request_mask, unsigned int flags); #ifdef CONFIG_FS_POSIX_ACL struct posix_acl *ll_get_acl(struct inode *inode, int type); +int ll_set_acl(struct inode *inode, struct posix_acl *acl, int type); #else #define ll_get_acl NULL +#define ll_set_acl NULL #endif /* CONFIG_FS_POSIX_ACL */ int ll_migrate(struct inode *parent, struct file *file, int mdtidx, -- 1.8.3.1