Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a68979b8 authored by Tiger Yang's avatar Tiger Yang Committed by Mark Fasheh
Browse files

ocfs2: add mount option and Kconfig option for acl



This patch adds the Kconfig option "CONFIG_OCFS2_FS_POSIX_ACL"
and mount options "acl" to enable acls in Ocfs2.

Signed-off-by: default avatarTiger Yang <tiger.yang@oracle.com>
Signed-off-by: default avatarMark Fasheh <mfasheh@suse.com>
parent 89c38bd0
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -31,7 +31,6 @@ Features which OCFS2 does not support yet:
	- quotas
	- quotas
	- Directory change notification (F_NOTIFY)
	- Directory change notification (F_NOTIFY)
	- Distributed Caching (F_SETLEASE/F_GETLEASE/break_lease)
	- Distributed Caching (F_SETLEASE/F_GETLEASE/break_lease)
	- POSIX ACLs


Mount options
Mount options
=============
=============
@@ -79,3 +78,5 @@ inode64 Indicates that Ocfs2 is allowed to create inodes at
			bits of significance.
			bits of significance.
user_xattr	(*)	Enables Extended User Attributes.
user_xattr	(*)	Enables Extended User Attributes.
nouser_xattr		Disables Extended User Attributes.
nouser_xattr		Disables Extended User Attributes.
acl			Enables POSIX Access Control Lists support.
noacl		(*)	Disables POSIX Access Control Lists support.
+9 −0
Original line number Original line Diff line number Diff line
@@ -268,6 +268,15 @@ config OCFS2_COMPAT_JBD
	  is backwards compatible with JBD.  It is safe to say N here.
	  is backwards compatible with JBD.  It is safe to say N here.
	  However, if you really want to use the original JBD, say Y here.
	  However, if you really want to use the original JBD, say Y here.


config OCFS2_FS_POSIX_ACL
	bool "OCFS2 POSIX Access Control Lists"
	depends on OCFS2_FS
	select FS_POSIX_ACL
	default n
	help
	  Posix Access Control Lists (ACLs) support permissions for users and
	  groups beyond the owner/group/world scheme.

endif # BLOCK
endif # BLOCK


source "fs/notify/Kconfig"
source "fs/notify/Kconfig"
+33 −0
Original line number Original line Diff line number Diff line
@@ -158,6 +158,8 @@ enum {
	Opt_user_xattr,
	Opt_user_xattr,
	Opt_nouser_xattr,
	Opt_nouser_xattr,
	Opt_inode64,
	Opt_inode64,
	Opt_acl,
	Opt_noacl,
	Opt_err,
	Opt_err,
};
};


@@ -180,6 +182,8 @@ static const match_table_t tokens = {
	{Opt_user_xattr, "user_xattr"},
	{Opt_user_xattr, "user_xattr"},
	{Opt_nouser_xattr, "nouser_xattr"},
	{Opt_nouser_xattr, "nouser_xattr"},
	{Opt_inode64, "inode64"},
	{Opt_inode64, "inode64"},
	{Opt_acl, "acl"},
	{Opt_noacl, "noacl"},
	{Opt_err, NULL}
	{Opt_err, NULL}
};
};


@@ -466,6 +470,8 @@ unlock_osb:
	if (!ret) {
	if (!ret) {
		/* Only save off the new mount options in case of a successful
		/* Only save off the new mount options in case of a successful
		 * remount. */
		 * remount. */
		if (!(osb->s_feature_incompat & OCFS2_FEATURE_INCOMPAT_XATTR))
			parsed_options.mount_opt &= ~OCFS2_MOUNT_POSIX_ACL;
		osb->s_mount_opt = parsed_options.mount_opt;
		osb->s_mount_opt = parsed_options.mount_opt;
		osb->s_atime_quantum = parsed_options.atime_quantum;
		osb->s_atime_quantum = parsed_options.atime_quantum;
		osb->preferred_slot = parsed_options.slot;
		osb->preferred_slot = parsed_options.slot;
@@ -651,6 +657,10 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent)
	}
	}
	brelse(bh);
	brelse(bh);
	bh = NULL;
	bh = NULL;

	if (!(osb->s_feature_incompat & OCFS2_FEATURE_INCOMPAT_XATTR))
		parsed_options.mount_opt &= ~OCFS2_MOUNT_POSIX_ACL;

	osb->s_mount_opt = parsed_options.mount_opt;
	osb->s_mount_opt = parsed_options.mount_opt;
	osb->s_atime_quantum = parsed_options.atime_quantum;
	osb->s_atime_quantum = parsed_options.atime_quantum;
	osb->preferred_slot = parsed_options.slot;
	osb->preferred_slot = parsed_options.slot;
@@ -664,6 +674,9 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent)


	sb->s_magic = OCFS2_SUPER_MAGIC;
	sb->s_magic = OCFS2_SUPER_MAGIC;


	sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
		((osb->s_mount_opt & OCFS2_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0);

	/* Hard readonly mode only if: bdev_read_only, MS_RDONLY,
	/* Hard readonly mode only if: bdev_read_only, MS_RDONLY,
	 * heartbeat=none */
	 * heartbeat=none */
	if (bdev_read_only(sb->s_bdev)) {
	if (bdev_read_only(sb->s_bdev)) {
@@ -945,6 +958,19 @@ static int ocfs2_parse_options(struct super_block *sb,
		case Opt_inode64:
		case Opt_inode64:
			mopt->mount_opt |= OCFS2_MOUNT_INODE64;
			mopt->mount_opt |= OCFS2_MOUNT_INODE64;
			break;
			break;
#ifdef CONFIG_OCFS2_FS_POSIX_ACL
		case Opt_acl:
			mopt->mount_opt |= OCFS2_MOUNT_POSIX_ACL;
			break;
		case Opt_noacl:
			mopt->mount_opt &= ~OCFS2_MOUNT_POSIX_ACL;
			break;
#else
		case Opt_acl:
		case Opt_noacl:
			printk(KERN_INFO "ocfs2 (no)acl options not supported\n");
			break;
#endif
		default:
		default:
			mlog(ML_ERROR,
			mlog(ML_ERROR,
			     "Unrecognized mount option \"%s\" "
			     "Unrecognized mount option \"%s\" "
@@ -1017,6 +1043,13 @@ static int ocfs2_show_options(struct seq_file *s, struct vfsmount *mnt)
	if (opts & OCFS2_MOUNT_INODE64)
	if (opts & OCFS2_MOUNT_INODE64)
		seq_printf(s, ",inode64");
		seq_printf(s, ",inode64");


#ifdef CONFIG_OCFS2_FS_POSIX_ACL
	if (opts & OCFS2_MOUNT_POSIX_ACL)
		seq_printf(s, ",acl");
	else
		seq_printf(s, ",noacl");
#endif

	return 0;
	return 0;
}
}