9b9d2ab415
Lock managers need to be able to cancel pending lock requests. In the case where the exported filesystem manages its own locks, it's not sufficient just to call posix_unblock_lock(); we need to let the filesystem know what's happening too. We do this by adding a new fcntl lock command: FL_CANCELLK. Some day this might also be made available to userspace applications that could benefit from an asynchronous locking api. Signed-off-by: Marc Eshel <eshel@almaden.ibm.com> Signed-off-by: "J. Bruce Fields" <bfields@citi.umich.edu>
66 lines
2.2 KiB
C
66 lines
2.2 KiB
C
#ifndef _LINUX_FCNTL_H
|
|
#define _LINUX_FCNTL_H
|
|
|
|
#include <asm/fcntl.h>
|
|
|
|
/* Cancel a blocking posix lock; internal use only until we expose an
|
|
* asynchronous lock api to userspace: */
|
|
#define F_CANCELLK (F_LINUX_SPECIFIC_BASE+5)
|
|
|
|
#define F_SETLEASE (F_LINUX_SPECIFIC_BASE+0)
|
|
#define F_GETLEASE (F_LINUX_SPECIFIC_BASE+1)
|
|
|
|
/*
|
|
* Request nofications on a directory.
|
|
* See below for events that may be notified.
|
|
*/
|
|
#define F_NOTIFY (F_LINUX_SPECIFIC_BASE+2)
|
|
|
|
/*
|
|
* Types of directory notifications that may be requested.
|
|
*/
|
|
#define DN_ACCESS 0x00000001 /* File accessed */
|
|
#define DN_MODIFY 0x00000002 /* File modified */
|
|
#define DN_CREATE 0x00000004 /* File created */
|
|
#define DN_DELETE 0x00000008 /* File removed */
|
|
#define DN_RENAME 0x00000010 /* File renamed */
|
|
#define DN_ATTRIB 0x00000020 /* File changed attibutes */
|
|
#define DN_MULTISHOT 0x80000000 /* Don't remove notifier */
|
|
|
|
#define AT_FDCWD -100 /* Special value used to indicate
|
|
openat should use the current
|
|
working directory. */
|
|
#define AT_SYMLINK_NOFOLLOW 0x100 /* Do not follow symbolic links. */
|
|
#define AT_REMOVEDIR 0x200 /* Remove directory instead of
|
|
unlinking file. */
|
|
#define AT_SYMLINK_FOLLOW 0x400 /* Follow symbolic links. */
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
#ifndef force_o_largefile
|
|
#define force_o_largefile() (BITS_PER_LONG != 32)
|
|
#endif
|
|
|
|
#if BITS_PER_LONG == 32
|
|
#define IS_GETLK32(cmd) ((cmd) == F_GETLK)
|
|
#define IS_SETLK32(cmd) ((cmd) == F_SETLK)
|
|
#define IS_SETLKW32(cmd) ((cmd) == F_SETLKW)
|
|
#define IS_GETLK64(cmd) ((cmd) == F_GETLK64)
|
|
#define IS_SETLK64(cmd) ((cmd) == F_SETLK64)
|
|
#define IS_SETLKW64(cmd) ((cmd) == F_SETLKW64)
|
|
#else
|
|
#define IS_GETLK32(cmd) (0)
|
|
#define IS_SETLK32(cmd) (0)
|
|
#define IS_SETLKW32(cmd) (0)
|
|
#define IS_GETLK64(cmd) ((cmd) == F_GETLK)
|
|
#define IS_SETLK64(cmd) ((cmd) == F_SETLK)
|
|
#define IS_SETLKW64(cmd) ((cmd) == F_SETLKW)
|
|
#endif /* BITS_PER_LONG == 32 */
|
|
|
|
#define IS_GETLK(cmd) (IS_GETLK32(cmd) || IS_GETLK64(cmd))
|
|
#define IS_SETLK(cmd) (IS_SETLK32(cmd) || IS_SETLK64(cmd))
|
|
#define IS_SETLKW(cmd) (IS_SETLKW32(cmd) || IS_SETLKW64(cmd))
|
|
|
|
#endif /* __KERNEL__ */
|
|
|
|
#endif
|