From patchwork Thu Jul 29 17:57:55 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Aneesh Kumar K.V" X-Patchwork-Id: 60291 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id B48D41007D3 for ; Fri, 30 Jul 2010 04:01:17 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756619Ab0G2SAY (ORCPT ); Thu, 29 Jul 2010 14:00:24 -0400 Received: from e23smtp05.au.ibm.com ([202.81.31.147]:41850 "EHLO e23smtp05.au.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756308Ab0G2SAW (ORCPT ); Thu, 29 Jul 2010 14:00:22 -0400 Received: from d23relay03.au.ibm.com (d23relay03.au.ibm.com [202.81.31.245]) by e23smtp05.au.ibm.com (8.14.4/8.13.1) with ESMTP id o6THu1OT020635; Fri, 30 Jul 2010 03:56:01 +1000 Received: from d23av04.au.ibm.com (d23av04.au.ibm.com [9.190.235.139]) by d23relay03.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o6TI0LFZ1511442; Fri, 30 Jul 2010 04:00:21 +1000 Received: from d23av04.au.ibm.com (loopback [127.0.0.1]) by d23av04.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id o6TI0JsN000710; Fri, 30 Jul 2010 04:00:20 +1000 Received: from localhost.localdomain ([9.124.213.24]) by d23av04.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id o6THwhwD031655; Fri, 30 Jul 2010 04:00:13 +1000 From: "Aneesh Kumar K.V" To: sfrench@us.ibm.com, ffilz@us.ibm.com, agruen@suse.de, adilger@sun.com, sandeen@redhat.com, tytso@mit.edu, bfields@citi.umich.edu, jlayton@redhat.com Cc: aneesh.kumar@linux.vnet.ibm.com, linux-fsdevel@vger.kernel.org, nfsv4@linux-nfs.org, linux-ext4@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH -V3 17/17] ext4: Add temporary richacl mount option for ext4. Date: Thu, 29 Jul 2010 23:27:55 +0530 Message-Id: <1280426275-4602-18-git-send-email-aneesh.kumar@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.0.4 In-Reply-To: <1280426275-4602-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com> References: <1280426275-4602-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com> Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org This helps in easy testing of the patchset. The mount option will be later removed in favour of a feature flag. ***Should be folded before merging*** Signed-off-by: Aneesh Kumar K.V --- fs/ext4/ext4.h | 1 + fs/ext4/super.c | 54 ++++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 651379b..b62bd61 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -884,6 +884,7 @@ struct ext4_inode_info { #define EXT4_MOUNT_DATA_ERR_ABORT 0x10000000 /* Abort on file data write */ #define EXT4_MOUNT_BLOCK_VALIDITY 0x20000000 /* Block validity checking */ #define EXT4_MOUNT_DISCARD 0x40000000 /* Issue DISCARD requests */ +#define EXT4_MOUNT_RICHACL 0x80000000 /* Temp richacl enable */ #define clear_opt(o, opt) o &= ~EXT4_MOUNT_##opt #define set_opt(o, opt) o |= EXT4_MOUNT_##opt diff --git a/fs/ext4/super.c b/fs/ext4/super.c index d0d3766..784de34 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -922,6 +922,10 @@ static int ext4_show_options(struct seq_file *seq, struct vfsmount *vfs) if (!(sb->s_flags & MS_POSIXACL) && (def_mount_opts & EXT4_DEFM_ACL)) seq_puts(seq, ",noacl"); #endif +#ifdef CONFIG_EXT4_FS_RICHACL + if (sb->s_flags & MS_RICHACL) + seq_puts(seq, ",richacl"); +#endif if (sbi->s_commit_interval != JBD2_DEFAULT_MAX_COMMIT_AGE*HZ) { seq_printf(seq, ",commit=%u", (unsigned) (sbi->s_commit_interval / HZ)); @@ -1160,7 +1164,7 @@ enum { Opt_block_validity, Opt_noblock_validity, Opt_inode_readahead_blks, Opt_journal_ioprio, Opt_dioread_nolock, Opt_dioread_lock, - Opt_discard, Opt_nodiscard, + Opt_discard, Opt_nodiscard, Opt_richacl, }; static const match_table_t tokens = { @@ -1231,6 +1235,7 @@ static const match_table_t tokens = { {Opt_dioread_lock, "dioread_lock"}, {Opt_discard, "discard"}, {Opt_nodiscard, "nodiscard"}, + {Opt_richacl, "richacl"}, {Opt_err, NULL}, }; @@ -1257,6 +1262,35 @@ static ext4_fsblk_t get_sb_block(void **data) return sb_block; } +static void enable_acl(struct super_block *sb) +{ +#if !defined(CONFIG_EXT4_FS_POSIX_ACL) + ext4_msg(sb, KERN_ERR, "acl options not supported"); + return; +#endif + sb->s_flags |= MS_POSIXACL; +} + +static void disable_acl(struct super_block *sb) +{ +#if !defined(CONFIG_EXT4_FS_POSIX_ACL) + ext4_msg(sb, KERN_ERR, "acl options not supported"); + return; +#endif + sb->s_flags &= ~MS_POSIXACL; + return; +} + +static void enable_richacl(struct super_block *sb) +{ +#if !defined(CONFIG_EXT4_FS_RICHACL) + ext4_msg(sb, KERN_ERR, "richacl options not supported"); + return; +#endif + sb->s_flags |= MS_RICHACL; + return; +} + #define DEFAULT_JOURNAL_IOPRIO (IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 3)) static char deprecated_msg[] = "Mount option \"%s\" will be removed by %s\n" "Contact linux-ext4@vger.kernel.org if you think we should keep it.\n"; @@ -1421,19 +1455,12 @@ static int parse_options(char *options, struct super_block *sb, ext4_msg(sb, KERN_ERR, "(no)user_xattr options not supported"); break; #endif -#ifdef CONFIG_EXT4_FS_POSIX_ACL case Opt_acl: - sb->s_flags |= MS_POSIXACL; + enable_acl(sb); break; case Opt_noacl: - sb->s_flags &= ~MS_POSIXACL; + disable_acl(sb); break; -#else - case Opt_acl: - case Opt_noacl: - ext4_msg(sb, KERN_ERR, "(no)acl options not supported"); - break; -#endif case Opt_journal_update: /* @@@ FIXME */ /* Eventually we will want to be able to create @@ -1699,6 +1726,9 @@ set_qf_format: case Opt_dioread_lock: clear_opt(sbi->s_mount_opt, DIOREAD_NOLOCK); break; + case Opt_richacl: + enable_richacl(sb); + break; default: ext4_msg(sb, KERN_ERR, "Unrecognized mount option \"%s\" " @@ -2529,9 +2559,9 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) if (def_mount_opts & EXT4_DEFM_XATTR_USER) set_opt(sbi->s_mount_opt, XATTR_USER); #endif -#ifdef CONFIG_EXT4_FS_POSIX_ACL +#if defined(CONFIG_EXT4_FS_POSIX_ACL) if (def_mount_opts & EXT4_DEFM_ACL) - sb->s_flags |= MS_POSIXACL; + enable_acl(sb); #endif if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_DATA) set_opt(sbi->s_mount_opt, JOURNAL_DATA);