[Ocfs2-devel] Re: [patch 2/5] ocfs2: add compatibility for
mandatory_lock()
Sunil Mushran
Sunil.Mushran at oracle.com
Fri Feb 1 15:36:51 PST 2008
Jeff Mahoney wrote:
> SLES10 doesn't have a mandatory_lock() function, but does support
> IS_MANDATORY() and the associated functions.
>
> This patch adds mandatory_lock() support.
>
> Signed-off-by: Jeff Mahoney <jeffm at suse.com>
>
Signed-off-by: Sunil Mushran <sunil.mushran at oracle.com>
> ---
>
> Config.make.in | 1 +
> configure.in | 6 ++++++
> fs/ocfs2/Makefile | 4 ++++
> kapi-compat/include/mandatory_lock.h | 27 +++++++++++++++++++++++++++
> 4 files changed, 38 insertions(+)
>
> --- a/Config.make.in 2008-01-31 13:48:44.000000000 -0500
> +++ b/Config.make.in 2008-01-31 13:49:00.000000000 -0500
> @@ -88,6 +88,7 @@ INVALIDATEPAGE_RETURNS_INT = @INVALIDATE
> DIO_OLD_GET_BLOCKS = @DIO_OLD_GET_BLOCKS@
> HAS_SYSTEM_UTSNAME = @HAS_SYSTEM_UTSNAME@
> NO_LOCKDEP = @NO_LOCKDEP@
> +NO_MANDATORY_LOCK = @NO_MANDATORY_LOCK@
>
> OCFS_DEBUG = @OCFS_DEBUG@
>
> --- a/configure.in 2008-01-31 13:48:44.000000000 -0500
> +++ b/configure.in 2008-01-31 13:49:00.000000000 -0500
> @@ -384,6 +384,12 @@ OCFS2_CHECK_KERNEL([linux/lockdep.h], lo
> NO_LOCKDEP=yes, [^struct lock_class {])
> AC_SUBST(NO_LOCKDEP)
>
> +NO_MANDATORY_LOCK=
> +OCFS2_CHECK_KERNEL([mandatory_lock() in fs.h], fs.h, ,
> + NO_MANDATORY_LOCK=yes, [^static inline int mandatory_lock(])
> +AC_SUBST(NO_MANDATORY_LOCK)
> +KAPI_COMPAT_HEADERS="$KAPI_COMPAT_HEADERS mandatory_lock.h"
> +
> # using -include has two advantages:
> # the source doesn't need to know to include compat headers
> # the compat header file names don't go through the search path
> --- a/fs/ocfs2/Makefile 2008-01-31 13:48:44.000000000 -0500
> +++ b/fs/ocfs2/Makefile 2008-01-31 13:49:00.000000000 -0500
> @@ -140,6 +140,10 @@ ifdef NO_LOCKDEP
> EXTRA_CFLAGS += -DNO_LOCKDEP
> endif
>
> +ifdef NO_MANDATORY_LOCK
> +EXTRA_CFLAGS += -DNO_MANDATORY_LOCK
> +endif
> +
> #
> # Since SUBDIRS means something to kbuild, define them safely. Do not
> # include trailing slashes.
> --- /dev/null 1970-01-01 00:00:00.000000000 +0000
> +++ b/kapi-compat/include/mandatory_lock.h 2008-01-31 13:49:00.000000000 -0500
> @@ -0,0 +1,27 @@
> +#ifndef KAPI_MANDATORY_LOCK_H
> +#define KAPI_MANDATORY_LOCK_H
> +
> +#ifdef NO_MANDATORY_LOCK
> +#include <linux/fs.h>
> +/*
> + * Candidates for mandatory locking have the setgid bit set
> + * but no group execute bit - an otherwise meaningless combination.
> + */
> +
> +static inline int __mandatory_lock(struct inode *ino)
> +{
> + return (ino->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID;
> +}
> +
> +/*
> + * ... and these candidates should be on MS_MANDLOCK mounted fs,
> + * otherwise these will be advisory locks
> + */
> +
> +static inline int mandatory_lock(struct inode *ino)
> +{
> + return IS_MANDLOCK(ino) && __mandatory_lock(ino);
> +}
> +#endif
> +
> +#endif /* KAPI_MANDATORY_LOCK_H */
>
>
>
More information about the Ocfs2-devel
mailing list