[GFS2] Export lm_interface to kernel headers
authorFabio Massimo Di Nitto <fabbione@ubuntu.com>
Tue, 19 Sep 2006 05:56:29 +0000 (07:56 +0200)
committerSteven Whitehouse <swhiteho@redhat.com>
Tue, 19 Sep 2006 12:45:18 +0000 (08:45 -0400)
lm_interface.h has a few out of the tree clients such as GFS1
and userland tools.

Right now, these clients keeps a copy of the file in their build tree
that can go out of sync.

Move lm_interface.h to include/linux, export it to userland and
clean up fs/gfs2 to use the new location.

Signed-off-by: Fabio M. Di Nitto <fabbione@ubuntu.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
36 files changed:
fs/gfs2/acl.c
fs/gfs2/bmap.c
fs/gfs2/daemon.c
fs/gfs2/dir.c
fs/gfs2/eaops.c
fs/gfs2/eattr.c
fs/gfs2/glock.c
fs/gfs2/glops.c
fs/gfs2/inode.c
fs/gfs2/lm.c
fs/gfs2/lm_interface.h [deleted file]
fs/gfs2/locking.c
fs/gfs2/locking/dlm/lock_dlm.h
fs/gfs2/locking/nolock/main.c
fs/gfs2/log.c
fs/gfs2/lops.c
fs/gfs2/main.c
fs/gfs2/meta_io.c
fs/gfs2/mount.c
fs/gfs2/ops_address.c
fs/gfs2/ops_dentry.c
fs/gfs2/ops_export.c
fs/gfs2/ops_file.c
fs/gfs2/ops_fstype.c
fs/gfs2/ops_inode.c
fs/gfs2/ops_super.c
fs/gfs2/ops_vm.c
fs/gfs2/quota.c
fs/gfs2/recovery.c
fs/gfs2/rgrp.c
fs/gfs2/super.c
fs/gfs2/sys.c
fs/gfs2/trans.c
fs/gfs2/util.c
include/linux/Kbuild
include/linux/lm_interface.h [new file with mode: 0644]

index d846b5ad1d87f454fff871bb95974682e35a8cc0..3123fc07123378d74642ebbd14bc31ad88f47778 100644 (file)
@@ -15,9 +15,9 @@
 #include <linux/posix_acl.h>
 #include <linux/posix_acl_xattr.h>
 #include <linux/gfs2_ondisk.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "acl.h"
 #include "eaops.h"
index bd5bc887ef9b63162e53a42ac65b4868a92b0eac..19b9bfc10349b0f4ed2808f55f489841298bb027 100644 (file)
@@ -14,9 +14,9 @@
 #include <linux/buffer_head.h>
 #include <linux/gfs2_ondisk.h>
 #include <linux/crc32.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "bmap.h"
 #include "glock.h"
index a2a07c41845d414c6ac3a6362e2a5c77cf1db203..a9908cd78cd94807c1d395c85311c662518c5542 100644 (file)
@@ -15,9 +15,9 @@
 #include <linux/kthread.h>
 #include <linux/delay.h>
 #include <linux/gfs2_ondisk.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "daemon.h"
 #include "glock.h"
index f3dbda216caf704d03849b20934d5e03a9bfcd34..7390286882702d7a69cfb2e1281f7c377275f710 100644 (file)
@@ -61,9 +61,9 @@
 #include <linux/gfs2_ondisk.h>
 #include <linux/crc32.h>
 #include <linux/vmalloc.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "dir.h"
 #include "glock.h"
index adb898ceaa181cfe71e8acecc89f610ca59783f0..1a7877fe73934c05b58d7d98e45ffa4bc9d6d971 100644 (file)
 #include <linux/buffer_head.h>
 #include <linux/xattr.h>
 #include <linux/gfs2_ondisk.h>
+#include <linux/lm_interface.h>
 #include <asm/uaccess.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "acl.h"
 #include "eaops.h"
index d7b92fba69987d22b4c39dd3325b444bf16586eb..698942ec7c99f874e9c61b2f675bbc98fc460349 100644 (file)
 #include <linux/buffer_head.h>
 #include <linux/xattr.h>
 #include <linux/gfs2_ondisk.h>
+#include <linux/lm_interface.h>
 #include <asm/uaccess.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "acl.h"
 #include "eaops.h"
index 64a1676e5f48a48538710cc419b0acf810f3c623..f98694e7d6685fd8c87c86ee715f51e00a821f6a 100644 (file)
 #include <linux/kallsyms.h>
 #include <linux/gfs2_ondisk.h>
 #include <linux/list.h>
+#include <linux/lm_interface.h>
 #include <asm/uaccess.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "glock.h"
 #include "glops.h"
index d3aef74ea5d4a6f033ce0aa761a74c757c8f490d..9c046dbf472954c3e9a5532b1b9aecb3d8f82c61 100644 (file)
@@ -13,9 +13,9 @@
 #include <linux/completion.h>
 #include <linux/buffer_head.h>
 #include <linux/gfs2_ondisk.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "bmap.h"
 #include "glock.h"
index 0d010f0654d9178d98e0702df79c8e9c0c636175..b9e4bcb3bf1e184e6e9486b4889224719a818095 100644 (file)
@@ -16,9 +16,9 @@
 #include <linux/sort.h>
 #include <linux/gfs2_ondisk.h>
 #include <linux/crc32.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "acl.h"
 #include "bmap.h"
index 4e23aa5ef75d3b523129ce1a2b4027695ad362aa..2109fc4791d4b92d3549403cdebd7fb39ebc1ce5 100644 (file)
@@ -14,9 +14,9 @@
 #include <linux/buffer_head.h>
 #include <linux/delay.h>
 #include <linux/gfs2_ondisk.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "glock.h"
 #include "lm.h"
diff --git a/fs/gfs2/lm_interface.h b/fs/gfs2/lm_interface.h
deleted file mode 100644 (file)
index 1418fdc..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
- * Copyright (C) 2004-2006 Red Hat, Inc.  All rights reserved.
- *
- * This copyrighted material is made available to anyone wishing to use,
- * modify, copy, or redistribute it subject to the terms and conditions
- * of the GNU General Public License version 2.
- */
-
-#ifndef __LM_INTERFACE_DOT_H__
-#define __LM_INTERFACE_DOT_H__
-
-
-typedef void (*lm_callback_t) (void *ptr, unsigned int type, void *data);
-
-/*
- * lm_mount() flags
- *
- * LM_MFLAG_SPECTATOR
- * GFS is asking to join the filesystem's lockspace, but it doesn't want to
- * modify the filesystem.  The lock module shouldn't assign a journal to the FS
- * mount.  It shouldn't send recovery callbacks to the FS mount.  If the node
- * dies or withdraws, all locks can be wiped immediately.
- */
-
-#define LM_MFLAG_SPECTATOR     0x00000001
-
-/*
- * lm_lockstruct flags
- *
- * LM_LSFLAG_LOCAL
- * The lock_nolock module returns LM_LSFLAG_LOCAL to GFS, indicating that GFS
- * can make single-node optimizations.
- */
-
-#define LM_LSFLAG_LOCAL                0x00000001
-
-/*
- * lm_lockname types
- */
-
-#define LM_TYPE_RESERVED       0x00
-#define LM_TYPE_NONDISK                0x01
-#define LM_TYPE_INODE          0x02
-#define LM_TYPE_RGRP           0x03
-#define LM_TYPE_META           0x04
-#define LM_TYPE_IOPEN          0x05
-#define LM_TYPE_FLOCK          0x06
-#define LM_TYPE_PLOCK          0x07
-#define LM_TYPE_QUOTA          0x08
-#define LM_TYPE_JOURNAL                0x09
-
-/*
- * lm_lock() states
- *
- * SHARED is compatible with SHARED, not with DEFERRED or EX.
- * DEFERRED is compatible with DEFERRED, not with SHARED or EX.
- */
-
-#define LM_ST_UNLOCKED         0
-#define LM_ST_EXCLUSIVE                1
-#define LM_ST_DEFERRED         2
-#define LM_ST_SHARED           3
-
-/*
- * lm_lock() flags
- *
- * LM_FLAG_TRY
- * Don't wait to acquire the lock if it can't be granted immediately.
- *
- * LM_FLAG_TRY_1CB
- * Send one blocking callback if TRY is set and the lock is not granted.
- *
- * LM_FLAG_NOEXP
- * GFS sets this flag on lock requests it makes while doing journal recovery.
- * These special requests should not be blocked due to the recovery like
- * ordinary locks would be.
- *
- * LM_FLAG_ANY
- * A SHARED request may also be granted in DEFERRED, or a DEFERRED request may
- * also be granted in SHARED.  The preferred state is whichever is compatible
- * with other granted locks, or the specified state if no other locks exist.
- *
- * LM_FLAG_PRIORITY
- * Override fairness considerations.  Suppose a lock is held in a shared state
- * and there is a pending request for the deferred state.  A shared lock
- * request with the priority flag would be allowed to bypass the deferred
- * request and directly join the other shared lock.  A shared lock request
- * without the priority flag might be forced to wait until the deferred
- * requested had acquired and released the lock.
- */
-
-#define LM_FLAG_TRY            0x00000001
-#define LM_FLAG_TRY_1CB                0x00000002
-#define LM_FLAG_NOEXP          0x00000004
-#define LM_FLAG_ANY            0x00000008
-#define LM_FLAG_PRIORITY       0x00000010
-
-/*
- * lm_lock() and lm_async_cb return flags
- *
- * LM_OUT_ST_MASK
- * Masks the lower two bits of lock state in the returned value.
- *
- * LM_OUT_CACHEABLE
- * The lock hasn't been released so GFS can continue to cache data for it.
- *
- * LM_OUT_CANCELED
- * The lock request was canceled.
- *
- * LM_OUT_ASYNC
- * The result of the request will be returned in an LM_CB_ASYNC callback.
- */
-
-#define LM_OUT_ST_MASK         0x00000003
-#define LM_OUT_CACHEABLE       0x00000004
-#define LM_OUT_CANCELED                0x00000008
-#define LM_OUT_ASYNC           0x00000080
-#define LM_OUT_ERROR           0x00000100
-
-/*
- * lm_callback_t types
- *
- * LM_CB_NEED_E LM_CB_NEED_D LM_CB_NEED_S
- * Blocking callback, a remote node is requesting the given lock in
- * EXCLUSIVE, DEFERRED, or SHARED.
- *
- * LM_CB_NEED_RECOVERY
- * The given journal needs to be recovered.
- *
- * LM_CB_DROPLOCKS
- * Reduce the number of cached locks.
- *
- * LM_CB_ASYNC
- * The given lock has been granted.
- */
-
-#define LM_CB_NEED_E           257
-#define LM_CB_NEED_D           258
-#define LM_CB_NEED_S           259
-#define LM_CB_NEED_RECOVERY    260
-#define LM_CB_DROPLOCKS                261
-#define LM_CB_ASYNC            262
-
-/*
- * lm_recovery_done() messages
- */
-
-#define LM_RD_GAVEUP           308
-#define LM_RD_SUCCESS          309
-
-
-struct lm_lockname {
-       u64 ln_number;
-       unsigned int ln_type;
-};
-
-#define lm_name_equal(name1, name2) \
-       (((name1)->ln_number == (name2)->ln_number) && \
-        ((name1)->ln_type == (name2)->ln_type)) \
-
-struct lm_async_cb {
-       struct lm_lockname lc_name;
-       int lc_ret;
-};
-
-struct lm_lockstruct;
-
-struct lm_lockops {
-       const char *lm_proto_name;
-
-       /*
-        * Mount/Unmount
-        */
-
-       int (*lm_mount) (char *table_name, char *host_data,
-                        lm_callback_t cb, void *cb_data,
-                        unsigned int min_lvb_size, int flags,
-                        struct lm_lockstruct *lockstruct,
-                        struct kobject *fskobj);
-
-       void (*lm_others_may_mount) (void *lockspace);
-
-       void (*lm_unmount) (void *lockspace);
-
-       void (*lm_withdraw) (void *lockspace);
-
-       /*
-        * Lock oriented operations
-        */
-
-       int (*lm_get_lock) (void *lockspace, struct lm_lockname *name, void **lockp);
-
-       void (*lm_put_lock) (void *lock);
-
-       unsigned int (*lm_lock) (void *lock, unsigned int cur_state,
-                                unsigned int req_state, unsigned int flags);
-
-       unsigned int (*lm_unlock) (void *lock, unsigned int cur_state);
-
-       void (*lm_cancel) (void *lock);
-
-       int (*lm_hold_lvb) (void *lock, char **lvbp);
-       void (*lm_unhold_lvb) (void *lock, char *lvb);
-
-       /*
-        * Posix Lock oriented operations
-        */
-
-       int (*lm_plock_get) (void *lockspace, struct lm_lockname *name,
-                            struct file *file, struct file_lock *fl);
-
-       int (*lm_plock) (void *lockspace, struct lm_lockname *name,
-                        struct file *file, int cmd, struct file_lock *fl);
-
-       int (*lm_punlock) (void *lockspace, struct lm_lockname *name,
-                          struct file *file, struct file_lock *fl);
-
-       /*
-        * Client oriented operations
-        */
-
-       void (*lm_recovery_done) (void *lockspace, unsigned int jid,
-                                 unsigned int message);
-
-       struct module *lm_owner;
-};
-
-/*
- * lm_mount() return values
- *
- * ls_jid - the journal ID this node should use
- * ls_first - this node is the first to mount the file system
- * ls_lvb_size - size in bytes of lock value blocks
- * ls_lockspace - lock module's context for this file system
- * ls_ops - lock module's functions
- * ls_flags - lock module features
- */
-
-struct lm_lockstruct {
-       unsigned int ls_jid;
-       unsigned int ls_first;
-       unsigned int ls_lvb_size;
-       void *ls_lockspace;
-       const struct lm_lockops *ls_ops;
-       int ls_flags;
-};
-
-/*
- * Lock module bottom interface.  A lock module makes itself available to GFS
- * with these functions.
- */
-
-int gfs2_register_lockproto(const struct lm_lockops *proto);
-void gfs2_unregister_lockproto(const struct lm_lockops *proto);
-
-/*
- * Lock module top interface.  GFS calls these functions when mounting or
- * unmounting a file system.
- */
-
-int gfs2_mount_lockproto(char *proto_name, char *table_name, char *host_data,
-                        lm_callback_t cb, void *cb_data,
-                        unsigned int min_lvb_size, int flags,
-                        struct lm_lockstruct *lockstruct,
-                        struct kobject *fskobj);
-
-void gfs2_unmount_lockproto(struct lm_lockstruct *lockstruct);
-
-void gfs2_withdraw_lockproto(struct lm_lockstruct *lockstruct);
-
-#endif /* __LM_INTERFACE_DOT_H__ */
-
index 65eca48b2eae23f81436cddd295241a3f4b4b7fe..663fee7287832baf70a2d644239d97ecf4db1523 100644 (file)
@@ -16,8 +16,7 @@
 #include <linux/kmod.h>
 #include <linux/fs.h>
 #include <linux/delay.h>
-
-#include "lm_interface.h"
+#include <linux/lm_interface.h>
 
 struct lmh_wrapper {
        struct list_head lw_list;
index 3a45c020d01e3176335097646898445ee0a6d7dc..33af707a4d3f39eed36bfb1fdefb9ff5cc9b3117 100644 (file)
@@ -26,7 +26,7 @@
 #include <net/sock.h>
 
 #include <linux/dlm.h>
-#include "../../lm_interface.h"
+#include <linux/lm_interface.h>
 
 /*
  * Internally, we prefix things with gdlm_ and GDLM_ (for gfs-dlm) since a
index 7b263fc6c273724ae93d0b670f7f17f62e082e99..acfbc941f31950c87323928cd6d48d82082f2685 100644 (file)
@@ -14,8 +14,7 @@
 #include <linux/types.h>
 #include <linux/fs.h>
 #include <linux/smp_lock.h>
-
-#include "../../lm_interface.h"
+#include <linux/lm_interface.h>
 
 struct nolock_lockspace {
        unsigned int nl_lvb_size;
index ab341cd0a76acaa049a487184ad2b9a928aaa591..08b80b263ade9050751b31d63bc2a8bbb1f75b3d 100644 (file)
@@ -14,9 +14,9 @@
 #include <linux/buffer_head.h>
 #include <linux/gfs2_ondisk.h>
 #include <linux/crc32.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "bmap.h"
 #include "glock.h"
index f8f6d4b56a0195fb546f669c1e5a227c9e607c70..e44d245d51d4bd60cff17cfe457caf62b1accf25 100644 (file)
@@ -13,9 +13,9 @@
 #include <linux/completion.h>
 #include <linux/buffer_head.h>
 #include <linux/gfs2_ondisk.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "glock.h"
 #include "log.h"
index d2867988cc346bb29048d3b88256a1b68df3d7a4..7903be735fe9adc51d652785484ddf816c8a56ab 100644 (file)
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/gfs2_ondisk.h>
+#include <linux/lm_interface.h>
 #include <asm/atomic.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "ops_fstype.h"
 #include "sys.h"
index 6af3521339fc249cd81bf1b0712fa3cd6b2da575..a5630ec6c045fb0e872ea6c08600ccee5566d7dc 100644 (file)
@@ -18,9 +18,9 @@
 #include <linux/swap.h>
 #include <linux/delay.h>
 #include <linux/gfs2_ondisk.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "glock.h"
 #include "glops.h"
index 257c4a179dc6dcb9203ed19adc91bae378a30fff..ef3092e29607c5db08289597305388449ffff7b0 100644 (file)
@@ -13,9 +13,9 @@
 #include <linux/completion.h>
 #include <linux/buffer_head.h>
 #include <linux/gfs2_ondisk.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "mount.h"
 #include "sys.h"
index 7cd53d118c89b5a2613cdf41cd1bbb1e84e6e93e..91ec8080eeb264d57185a22ab959107449eabe3a 100644 (file)
@@ -17,9 +17,9 @@
 #include <linux/mpage.h>
 #include <linux/fs.h>
 #include <linux/gfs2_ondisk.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "bmap.h"
 #include "glock.h"
index fa6ceffc7d82e69c1c34cdae16471d12579ffdbf..00041b1b802522254a8cb8689f4a67d245101808 100644 (file)
@@ -15,9 +15,9 @@
 #include <linux/smp_lock.h>
 #include <linux/gfs2_ondisk.h>
 #include <linux/crc32.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "dir.h"
 #include "glock.h"
index 470e8829e7f4b7ce489ccc6a0f3445f28e1b9b5a..86127d93bd35f6f846f7d5b46f53cfd4fa0ccb53 100644 (file)
@@ -14,9 +14,9 @@
 #include <linux/buffer_head.h>
 #include <linux/gfs2_ondisk.h>
 #include <linux/crc32.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "dir.h"
 #include "glock.h"
index b551074a3c98067bf428e6ccb132fcad5106b84e..80f3ff0bba7bac3cf34751c04f76dbef2072f2d5 100644 (file)
 #include <linux/ext2_fs.h>
 #include <linux/crc32.h>
 #include <linux/iflags.h>
+#include <linux/lm_interface.h>
 #include <asm/uaccess.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "bmap.h"
 #include "dir.h"
index e8b7a1ae163b6ffbb8f57fe37f68ac3347555666..e32a6b242e0cd08cb96fbe785549350d2c1b64f6 100644 (file)
@@ -17,9 +17,9 @@
 #include <linux/namei.h>
 #include <linux/mount.h>
 #include <linux/gfs2_ondisk.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "daemon.h"
 #include "glock.h"
index 2f38313b4bd5397378a69173da53cc3447f21b85..bb2ef6a865335d69fde137b020988fad61794238 100644 (file)
 #include <linux/posix_acl.h>
 #include <linux/gfs2_ondisk.h>
 #include <linux/crc32.h>
+#include <linux/lm_interface.h>
 #include <asm/uaccess.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "acl.h"
 #include "bmap.h"
index 975e93b7992e298a1a91fe5b93bb414cc8ad2b0e..f9538849c4181a81882f08c459abbabbc43c2001 100644 (file)
@@ -19,9 +19,9 @@
 #include <linux/delay.h>
 #include <linux/gfs2_ondisk.h>
 #include <linux/crc32.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "glock.h"
 #include "inode.h"
index 3b3463144126fd0ea362cacdb590e413950c6076..5453d2947ab3a40d7743925834349575f733536a 100644 (file)
@@ -15,9 +15,9 @@
 #include <linux/mm.h>
 #include <linux/pagemap.h>
 #include <linux/gfs2_ondisk.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "bmap.h"
 #include "glock.h"
index bc9ad058d20e60ed2949906849474d840a4cdba4..c5eb6c646177d6716143276ba6b75b6d9dbfbf5c 100644 (file)
@@ -44,9 +44,9 @@
 #include <linux/sort.h>
 #include <linux/fs.h>
 #include <linux/gfs2_ondisk.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "bmap.h"
 #include "glock.h"
index 130e9fbf96924d13a0d78bbc25e2ee620de8fa81..518f9128137e6bf930f21f32d68f2eaf6f41e819 100644 (file)
@@ -14,9 +14,9 @@
 #include <linux/buffer_head.h>
 #include <linux/gfs2_ondisk.h>
 #include <linux/crc32.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "bmap.h"
 #include "glock.h"
index 7a5ab817ad9c7825d7b120e51ad9224d98296e37..113b4ace6893e5e79c978fafa0e57655eb107606 100644 (file)
@@ -14,9 +14,9 @@
 #include <linux/buffer_head.h>
 #include <linux/fs.h>
 #include <linux/gfs2_ondisk.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "glock.h"
 #include "glops.h"
index f1d07d987c7bfd4ce35488caf710a5534b319725..fe207a3e206e9f16559f99c0b2bd5334f1b1ade0 100644 (file)
@@ -15,9 +15,9 @@
 #include <linux/crc32.h>
 #include <linux/gfs2_ondisk.h>
 #include <linux/bio.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "bmap.h"
 #include "dir.h"
index c9b23084918f4bec54c3dc83227440c9a7f0c770..0e0ec988f731c5ffd19306fcf34679c05ffa03d2 100644 (file)
 #include <linux/module.h>
 #include <linux/kobject.h>
 #include <linux/gfs2_ondisk.h>
+#include <linux/lm_interface.h>
 #include <asm/uaccess.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "lm.h"
 #include "sys.h"
index acf840160d5f7528becf6cd29891f2c6240f35e5..f8dabf8446bb417000b556b53d5f29b7fc74e8fd 100644 (file)
@@ -14,9 +14,9 @@
 #include <linux/buffer_head.h>
 #include <linux/gfs2_ondisk.h>
 #include <linux/kallsyms.h>
+#include <linux/lm_interface.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "glock.h"
 #include "log.h"
index d72eb8addc7a03791428bdbef6da379a5c5dbce9..196c604faadcfe16132fba320f070bbd88138bc8 100644 (file)
 #include <linux/buffer_head.h>
 #include <linux/crc32.h>
 #include <linux/gfs2_ondisk.h>
+#include <linux/lm_interface.h>
 #include <asm/uaccess.h>
 
 #include "gfs2.h"
-#include "lm_interface.h"
 #include "incore.h"
 #include "glock.h"
 #include "lm.h"
index 2121cde187d8794186a8082f1fdf65b77ad83bf4..d8e720f9c21aa47e63373b95dad040907686df29 100644 (file)
@@ -45,9 +45,9 @@ unifdef-y += acct.h adb.h adfs_fs.h agpgart.h apm_bios.h atalk.h      \
        inet_diag.h in.h inotify.h input.h ipc.h ipmi.h ipv6.h          \
        ipv6_route.h isdn.h isdnif.h isdn_ppp.h isicom.h jbd.h          \
        joystick.h kdev_t.h kd.h kernelcapi.h kernel.h keyboard.h       \
-       llc.h loop.h lp.h mempolicy.h mii.h mman.h mroute.h msdos_fs.h  \
-       msg.h nbd.h ncp_fs.h ncp.h ncp_mount.h netdevice.h              \
-       netfilter_bridge.h netfilter_decnet.h netfilter.h               \
+       llc.h lm_interface.h loop.h lp.h mempolicy.h mii.h mman.h       \
+       mroute.h msdos_fs.h msg.h nbd.h ncp_fs.h ncp.h ncp_mount.h      \
+       netdevice.h netfilter_bridge.h netfilter_decnet.h netfilter.h   \
        netfilter_ipv4.h netfilter_ipv6.h netfilter_logging.h net.h     \
        netlink.h nfs3.h nfs4.h nfsacl.h nfs_fs.h nfs.h nfs_idmap.h     \
        n_r3964.h nubus.h nvram.h parport.h patchkey.h pci.h pktcdvd.h  \
diff --git a/include/linux/lm_interface.h b/include/linux/lm_interface.h
new file mode 100644 (file)
index 0000000..1418fdc
--- /dev/null
@@ -0,0 +1,273 @@
+/*
+ * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
+ * Copyright (C) 2004-2006 Red Hat, Inc.  All rights reserved.
+ *
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU General Public License version 2.
+ */
+
+#ifndef __LM_INTERFACE_DOT_H__
+#define __LM_INTERFACE_DOT_H__
+
+
+typedef void (*lm_callback_t) (void *ptr, unsigned int type, void *data);
+
+/*
+ * lm_mount() flags
+ *
+ * LM_MFLAG_SPECTATOR
+ * GFS is asking to join the filesystem's lockspace, but it doesn't want to
+ * modify the filesystem.  The lock module shouldn't assign a journal to the FS
+ * mount.  It shouldn't send recovery callbacks to the FS mount.  If the node
+ * dies or withdraws, all locks can be wiped immediately.
+ */
+
+#define LM_MFLAG_SPECTATOR     0x00000001
+
+/*
+ * lm_lockstruct flags
+ *
+ * LM_LSFLAG_LOCAL
+ * The lock_nolock module returns LM_LSFLAG_LOCAL to GFS, indicating that GFS
+ * can make single-node optimizations.
+ */
+
+#define LM_LSFLAG_LOCAL                0x00000001
+
+/*
+ * lm_lockname types
+ */
+
+#define LM_TYPE_RESERVED       0x00
+#define LM_TYPE_NONDISK                0x01
+#define LM_TYPE_INODE          0x02
+#define LM_TYPE_RGRP           0x03
+#define LM_TYPE_META           0x04
+#define LM_TYPE_IOPEN          0x05
+#define LM_TYPE_FLOCK          0x06
+#define LM_TYPE_PLOCK          0x07
+#define LM_TYPE_QUOTA          0x08
+#define LM_TYPE_JOURNAL                0x09
+
+/*
+ * lm_lock() states
+ *
+ * SHARED is compatible with SHARED, not with DEFERRED or EX.
+ * DEFERRED is compatible with DEFERRED, not with SHARED or EX.
+ */
+
+#define LM_ST_UNLOCKED         0
+#define LM_ST_EXCLUSIVE                1
+#define LM_ST_DEFERRED         2
+#define LM_ST_SHARED           3
+
+/*
+ * lm_lock() flags
+ *
+ * LM_FLAG_TRY
+ * Don't wait to acquire the lock if it can't be granted immediately.
+ *
+ * LM_FLAG_TRY_1CB
+ * Send one blocking callback if TRY is set and the lock is not granted.
+ *
+ * LM_FLAG_NOEXP
+ * GFS sets this flag on lock requests it makes while doing journal recovery.
+ * These special requests should not be blocked due to the recovery like
+ * ordinary locks would be.
+ *
+ * LM_FLAG_ANY
+ * A SHARED request may also be granted in DEFERRED, or a DEFERRED request may
+ * also be granted in SHARED.  The preferred state is whichever is compatible
+ * with other granted locks, or the specified state if no other locks exist.
+ *
+ * LM_FLAG_PRIORITY
+ * Override fairness considerations.  Suppose a lock is held in a shared state
+ * and there is a pending request for the deferred state.  A shared lock
+ * request with the priority flag would be allowed to bypass the deferred
+ * request and directly join the other shared lock.  A shared lock request
+ * without the priority flag might be forced to wait until the deferred
+ * requested had acquired and released the lock.
+ */
+
+#define LM_FLAG_TRY            0x00000001
+#define LM_FLAG_TRY_1CB                0x00000002
+#define LM_FLAG_NOEXP          0x00000004
+#define LM_FLAG_ANY            0x00000008
+#define LM_FLAG_PRIORITY       0x00000010
+
+/*
+ * lm_lock() and lm_async_cb return flags
+ *
+ * LM_OUT_ST_MASK
+ * Masks the lower two bits of lock state in the returned value.
+ *
+ * LM_OUT_CACHEABLE
+ * The lock hasn't been released so GFS can continue to cache data for it.
+ *
+ * LM_OUT_CANCELED
+ * The lock request was canceled.
+ *
+ * LM_OUT_ASYNC
+ * The result of the request will be returned in an LM_CB_ASYNC callback.
+ */
+
+#define LM_OUT_ST_MASK         0x00000003
+#define LM_OUT_CACHEABLE       0x00000004
+#define LM_OUT_CANCELED                0x00000008
+#define LM_OUT_ASYNC           0x00000080
+#define LM_OUT_ERROR           0x00000100
+
+/*
+ * lm_callback_t types
+ *
+ * LM_CB_NEED_E LM_CB_NEED_D LM_CB_NEED_S
+ * Blocking callback, a remote node is requesting the given lock in
+ * EXCLUSIVE, DEFERRED, or SHARED.
+ *
+ * LM_CB_NEED_RECOVERY
+ * The given journal needs to be recovered.
+ *
+ * LM_CB_DROPLOCKS
+ * Reduce the number of cached locks.
+ *
+ * LM_CB_ASYNC
+ * The given lock has been granted.
+ */
+
+#define LM_CB_NEED_E           257
+#define LM_CB_NEED_D           258
+#define LM_CB_NEED_S           259
+#define LM_CB_NEED_RECOVERY    260
+#define LM_CB_DROPLOCKS                261
+#define LM_CB_ASYNC            262
+
+/*
+ * lm_recovery_done() messages
+ */
+
+#define LM_RD_GAVEUP           308
+#define LM_RD_SUCCESS          309
+
+
+struct lm_lockname {
+       u64 ln_number;
+       unsigned int ln_type;
+};
+
+#define lm_name_equal(name1, name2) \
+       (((name1)->ln_number == (name2)->ln_number) && \
+        ((name1)->ln_type == (name2)->ln_type)) \
+
+struct lm_async_cb {
+       struct lm_lockname lc_name;
+       int lc_ret;
+};
+
+struct lm_lockstruct;
+
+struct lm_lockops {
+       const char *lm_proto_name;
+
+       /*
+        * Mount/Unmount
+        */
+
+       int (*lm_mount) (char *table_name, char *host_data,
+                        lm_callback_t cb, void *cb_data,
+                        unsigned int min_lvb_size, int flags,
+                        struct lm_lockstruct *lockstruct,
+                        struct kobject *fskobj);
+
+       void (*lm_others_may_mount) (void *lockspace);
+
+       void (*lm_unmount) (void *lockspace);
+
+       void (*lm_withdraw) (void *lockspace);
+
+       /*
+        * Lock oriented operations
+        */
+
+       int (*lm_get_lock) (void *lockspace, struct lm_lockname *name, void **lockp);
+
+       void (*lm_put_lock) (void *lock);
+
+       unsigned int (*lm_lock) (void *lock, unsigned int cur_state,
+                                unsigned int req_state, unsigned int flags);
+
+       unsigned int (*lm_unlock) (void *lock, unsigned int cur_state);
+
+       void (*lm_cancel) (void *lock);
+
+       int (*lm_hold_lvb) (void *lock, char **lvbp);
+       void (*lm_unhold_lvb) (void *lock, char *lvb);
+
+       /*
+        * Posix Lock oriented operations
+        */
+
+       int (*lm_plock_get) (void *lockspace, struct lm_lockname *name,
+                            struct file *file, struct file_lock *fl);
+
+       int (*lm_plock) (void *lockspace, struct lm_lockname *name,
+                        struct file *file, int cmd, struct file_lock *fl);
+
+       int (*lm_punlock) (void *lockspace, struct lm_lockname *name,
+                          struct file *file, struct file_lock *fl);
+
+       /*
+        * Client oriented operations
+        */
+
+       void (*lm_recovery_done) (void *lockspace, unsigned int jid,
+                                 unsigned int message);
+
+       struct module *lm_owner;
+};
+
+/*
+ * lm_mount() return values
+ *
+ * ls_jid - the journal ID this node should use
+ * ls_first - this node is the first to mount the file system
+ * ls_lvb_size - size in bytes of lock value blocks
+ * ls_lockspace - lock module's context for this file system
+ * ls_ops - lock module's functions
+ * ls_flags - lock module features
+ */
+
+struct lm_lockstruct {
+       unsigned int ls_jid;
+       unsigned int ls_first;
+       unsigned int ls_lvb_size;
+       void *ls_lockspace;
+       const struct lm_lockops *ls_ops;
+       int ls_flags;
+};
+
+/*
+ * Lock module bottom interface.  A lock module makes itself available to GFS
+ * with these functions.
+ */
+
+int gfs2_register_lockproto(const struct lm_lockops *proto);
+void gfs2_unregister_lockproto(const struct lm_lockops *proto);
+
+/*
+ * Lock module top interface.  GFS calls these functions when mounting or
+ * unmounting a file system.
+ */
+
+int gfs2_mount_lockproto(char *proto_name, char *table_name, char *host_data,
+                        lm_callback_t cb, void *cb_data,
+                        unsigned int min_lvb_size, int flags,
+                        struct lm_lockstruct *lockstruct,
+                        struct kobject *fskobj);
+
+void gfs2_unmount_lockproto(struct lm_lockstruct *lockstruct);
+
+void gfs2_withdraw_lockproto(struct lm_lockstruct *lockstruct);
+
+#endif /* __LM_INTERFACE_DOT_H__ */
+