1 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2 * vim:expandtab:shiftwidth=8:tabstop=8:
4 * Copyright (C) 2002 Cluster File Systems, Inc.
6 * This code is issued under the GNU General Public License.
7 * See the file COPYING in this distribution
9 * by Cluster File Systems, Inc.
14 #include <linux/version.h>
15 #include <linux/module.h>
16 #include <linux/slab.h>
17 #include <asm/unistd.h>
19 #define DEBUG_SUBSYSTEM S_LDLM
21 #include <linux/obd_support.h>
22 #include <linux/obd_class.h>
24 #include <linux/lustre_dlm.h>
26 static int ldlm_test_callback(struct ldlm_lock *lock, struct ldlm_lock *new,
27 void *data, __u32 data_len)
29 printk("ldlm_test_callback: lock=%p, new=%p\n", lock, new);
33 int ldlm_test_basics(struct obd_device *obddev)
35 struct ldlm_namespace *ns;
36 struct ldlm_resource *res;
37 __u64 res_id[RES_NAME_SIZE] = {1, 2, 3};
39 struct ldlm_handle lockh_1, lockh_2;
44 ns = ldlm_namespace_new(obddev, 1);
48 res = ldlm_resource_get(ns, NULL, res_id, LDLM_PLAIN, 1);
52 /* Get a couple of read locks */
53 flags = LDLM_FL_BLOCKING_AST;
54 err = ldlm_local_lock_enqueue(obddev, 1, NULL, res_id, LDLM_PLAIN,
55 NULL, LCK_CR, &flags, NULL,
56 ldlm_test_callback, NULL, 0, &lockh_1);
60 err = ldlm_local_lock_enqueue(obddev, 1, NULL, res_id, LDLM_PLAIN,
61 NULL, LCK_EX, &flags, NULL,
62 ldlm_test_callback, NULL, 0, &lockh_2);
63 if (err != -ELDLM_BLOCK_GRANTED)
66 ldlm_resource_dump(res);
68 err = ldlm_local_lock_convert(obddev, &lockh_1, LCK_NL, &flags);
72 ldlm_resource_dump(res);
79 int ldlm_test_extents(struct obd_device *obddev)
81 struct ldlm_namespace *ns;
82 struct ldlm_resource *res;
83 __u64 res_id[RES_NAME_SIZE] = {0, 0, 0};
84 struct ldlm_extent ext1 = {4, 6}, ext2 = {6, 9}, ext3 = {10, 11};
85 struct ldlm_handle ext1_h, ext2_h, ext3_h;
91 ns = ldlm_namespace_new(obddev, 2);
96 err = ldlm_local_lock_enqueue(obddev, 2, NULL, res_id, LDLM_EXTENT,
97 &ext1, LCK_PR, &flags, NULL, NULL, NULL,
101 if (!(flags & LDLM_FL_LOCK_CHANGED))
105 err = ldlm_local_lock_enqueue(obddev, 2, NULL, res_id, LDLM_EXTENT,
106 &ext2, LCK_PR, &flags, NULL, NULL, NULL,
110 if (!(flags & LDLM_FL_LOCK_CHANGED))
114 err = ldlm_local_lock_enqueue(obddev, 2, NULL, res_id, LDLM_EXTENT,
115 &ext3, LCK_EX, &flags, NULL, NULL, NULL,
117 if (err != -ELDLM_BLOCK_GRANTED)
119 if (flags & LDLM_FL_LOCK_CHANGED)
122 /* Convert/cancel blocking locks */
124 err = ldlm_local_lock_convert(obddev, &ext1_h, LCK_NL, &flags);
129 err = ldlm_local_lock_cancel(obddev, &ext2_h);
133 /* Dump the results */
134 res = ldlm_resource_get(ns, NULL, res_id, LDLM_EXTENT, 0);
137 ldlm_resource_dump(res);
144 int ldlm_test(struct obd_device *obddev)
147 rc = ldlm_test_basics(obddev);
151 rc = ldlm_test_extents(obddev);