Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Branch HEAD
[fs/lustre-release.git]
/
lustre
/
ldlm
/
ldlm_resource.c
diff --git
a/lustre/ldlm/ldlm_resource.c
b/lustre/ldlm/ldlm_resource.c
index
92d789f
..
e5caa7b
100644
(file)
--- a/
lustre/ldlm/ldlm_resource.c
+++ b/
lustre/ldlm/ldlm_resource.c
@@
-266,13
+266,6
@@
void ldlm_proc_namespace(struct ldlm_namespace *ns)
lock_vars[0].write_fptr = lprocfs_wr_lru_size;
lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
lock_vars[0].write_fptr = lprocfs_wr_lru_size;
lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
- snprintf(lock_name, MAX_STRING_SIZE, "%s/shrink_thumb",
- ns->ns_name);
- lock_vars[0].data = ns;
- lock_vars[0].read_fptr = lprocfs_rd_uint;
- lock_vars[0].write_fptr = lprocfs_wr_uint;
- lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
-
snprintf(lock_name, MAX_STRING_SIZE, "%s/lru_max_age",
ns->ns_name);
lock_vars[0].data = &ns->ns_max_age;
snprintf(lock_name, MAX_STRING_SIZE, "%s/lru_max_age",
ns->ns_name);
lock_vars[0].data = &ns->ns_max_age;
@@
-287,6
+280,12
@@
void ldlm_proc_namespace(struct ldlm_namespace *ns)
lock_vars[0].write_fptr = lprocfs_wr_uint;
lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
lock_vars[0].write_fptr = lprocfs_wr_uint;
lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
+ snprintf(lock_name, MAX_STRING_SIZE, "%s/lock_timeouts",
+ ns->ns_name);
+ lock_vars[0].data = &ns->ns_timeouts;
+ lock_vars[0].read_fptr = lprocfs_rd_uint;
+ lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
+
snprintf(lock_name, MAX_STRING_SIZE, "%s/max_nolock_bytes",
ns->ns_name);
lock_vars[0].data = &ns->ns_max_nolock_size;
snprintf(lock_name, MAX_STRING_SIZE, "%s/max_nolock_bytes",
ns->ns_name);
lock_vars[0].data = &ns->ns_max_nolock_size;
@@
-336,7
+335,6
@@
struct ldlm_namespace *ldlm_namespace_new(struct obd_device *obd, char *name,
if (!ns->ns_hash)
GOTO(out_ns, NULL);
if (!ns->ns_hash)
GOTO(out_ns, NULL);
- ns->ns_shrink_thumb = LDLM_LOCK_SHRINK_THUMB;
ns->ns_appetite = apt;
LASSERT(obd != NULL);
ns->ns_appetite = apt;
LASSERT(obd != NULL);
@@
-370,6
+368,7
@@
struct ldlm_namespace *ldlm_namespace_new(struct obd_device *obd, char *name,
ns->ns_max_unused = LDLM_DEFAULT_LRU_SIZE;
ns->ns_max_age = LDLM_DEFAULT_MAX_ALIVE;
ns->ns_ctime_age_limit = LDLM_CTIME_AGE_LIMIT;
ns->ns_max_unused = LDLM_DEFAULT_LRU_SIZE;
ns->ns_max_age = LDLM_DEFAULT_MAX_ALIVE;
ns->ns_ctime_age_limit = LDLM_CTIME_AGE_LIMIT;
+ ns->ns_timeouts = 0;
spin_lock_init(&ns->ns_unused_lock);
ns->ns_orig_connect_flags = 0;
ns->ns_connect_flags = 0;
spin_lock_init(&ns->ns_unused_lock);
ns->ns_orig_connect_flags = 0;
ns->ns_connect_flags = 0;
@@
-455,7
+454,7
@@
static void cleanup_resource(struct ldlm_resource *res, struct list_head *q,
LDLM_DEBUG(lock, "setting FL_LOCAL_ONLY");
if (lock->l_completion_ast)
lock->l_completion_ast(lock, 0, NULL);
LDLM_DEBUG(lock, "setting FL_LOCAL_ONLY");
if (lock->l_completion_ast)
lock->l_completion_ast(lock, 0, NULL);
- LDLM_LOCK_
PUT
(lock);
+ LDLM_LOCK_
RELEASE
(lock);
continue;
}
continue;
}
@@
-474,7
+473,7
@@
static void cleanup_resource(struct ldlm_resource *res, struct list_head *q,
"client node");
ldlm_lock_destroy(lock);
}
"client node");
ldlm_lock_destroy(lock);
}
- LDLM_LOCK_
PUT
(lock);
+ LDLM_LOCK_
RELEASE
(lock);
} while (1);
EXIT;
} while (1);
EXIT;
@@
-498,6
+497,7
@@
int ldlm_namespace_cleanup(struct ldlm_namespace *ns, int flags)
res = list_entry(tmp, struct ldlm_resource, lr_hash);
ldlm_resource_getref(res);
spin_unlock(&ns->ns_hash_lock);
res = list_entry(tmp, struct ldlm_resource, lr_hash);
ldlm_resource_getref(res);
spin_unlock(&ns->ns_hash_lock);
+ LDLM_RESOURCE_ADDREF(res);
cleanup_resource(res, &res->lr_granted, flags);
cleanup_resource(res, &res->lr_converting, flags);
cleanup_resource(res, &res->lr_granted, flags);
cleanup_resource(res, &res->lr_converting, flags);
@@
-511,6
+511,7
@@
int ldlm_namespace_cleanup(struct ldlm_namespace *ns, int flags)
* client gets blocking ast when lock gets distracted by
* server. This is 1_4 branch solution, let's see how
* will it behave. */
* client gets blocking ast when lock gets distracted by
* server. This is 1_4 branch solution, let's see how
* will it behave. */
+ LDLM_RESOURCE_DELREF(res);
if (!ldlm_resource_putref_locked(res))
CDEBUG(D_INFO,
"Namespace %s resource refcount nonzero "
if (!ldlm_resource_putref_locked(res))
CDEBUG(D_INFO,
"Namespace %s resource refcount nonzero "
@@
-687,7
+688,6
@@
void ldlm_namespace_free(struct ldlm_namespace *ns,
void ldlm_namespace_get_locked(struct ldlm_namespace *ns)
{
void ldlm_namespace_get_locked(struct ldlm_namespace *ns)
{
- LASSERT(ns->ns_refcount >= 0);
ns->ns_refcount++;
}
ns->ns_refcount++;
}
@@
-773,7
+773,7
@@
static struct ldlm_resource *ldlm_resource_new(void)
struct ldlm_resource *res;
int idx;
struct ldlm_resource *res;
int idx;
- OBD_SLAB_ALLOC
(res, ldlm_resource_slab, CFS_ALLOC_IO, sizeof *res
);
+ OBD_SLAB_ALLOC
_PTR_GFP(res, ldlm_resource_slab, CFS_ALLOC_IO
);
if (res == NULL)
return NULL;
if (res == NULL)
return NULL;
@@
-794,6
+794,7
@@
static struct ldlm_resource *ldlm_resource_new(void)
atomic_set(&res->lr_refcount, 1);
spin_lock_init(&res->lr_lock);
atomic_set(&res->lr_refcount, 1);
spin_lock_init(&res->lr_lock);
+ lu_ref_init(&res->lr_reference);
/* one who creates the resource must unlock
* the semaphore after lvb initialization */
/* one who creates the resource must unlock
* the semaphore after lvb initialization */
@@
-965,6
+966,7
@@
void __ldlm_resource_putref_final(struct ldlm_resource *res)
ldlm_namespace_put_locked(ns, 0);
list_del_init(&res->lr_hash);
list_del_init(&res->lr_childof);
ldlm_namespace_put_locked(ns, 0);
list_del_init(&res->lr_hash);
list_del_init(&res->lr_childof);
+ lu_ref_fini(&res->lr_reference);
ns->ns_resources--;
if (ns->ns_resources == 0)
ns->ns_resources--;
if (ns->ns_resources == 0)
@@
-1026,8
+1028,8
@@
void ldlm_resource_add_lock(struct ldlm_resource *res, struct list_head *head,
check_res_locked(res);
ldlm_resource_dump(D_INFO, res);
check_res_locked(res);
ldlm_resource_dump(D_INFO, res);
- CDEBUG(D_
INFO
, "About to add this lock:\n");
- ldlm_lock_dump(D_
INFO
, lock, 0);
+ CDEBUG(D_
OTHER
, "About to add this lock:\n");
+ ldlm_lock_dump(D_
OTHER
, lock, 0);
if (lock->l_destroyed) {
CDEBUG(D_OTHER, "Lock destroyed, not adding to resource\n");
if (lock->l_destroyed) {
CDEBUG(D_OTHER, "Lock destroyed, not adding to resource\n");
@@
-1046,7
+1048,7
@@
void ldlm_resource_insert_lock_after(struct ldlm_lock *original,
check_res_locked(res);
check_res_locked(res);
- ldlm_resource_dump(D_
OTHER
, res);
+ ldlm_resource_dump(D_
INFO
, res);
CDEBUG(D_OTHER, "About to insert this lock after %p:\n", original);
ldlm_lock_dump(D_OTHER, new, 0);
CDEBUG(D_OTHER, "About to insert this lock after %p:\n", original);
ldlm_lock_dump(D_OTHER, new, 0);
@@
-1119,11
+1121,13
@@
void ldlm_namespace_dump(int level, struct ldlm_namespace *ns)
ldlm_resource_getref(res);
spin_unlock(&ns->ns_hash_lock);
ldlm_resource_getref(res);
spin_unlock(&ns->ns_hash_lock);
+ LDLM_RESOURCE_ADDREF(res);
lock_res(res);
ldlm_resource_dump(level, res);
unlock_res(res);
lock_res(res);
ldlm_resource_dump(level, res);
unlock_res(res);
+ LDLM_RESOURCE_DELREF(res);
spin_lock(&ns->ns_hash_lock);
tmp = tmp->next;
ldlm_resource_putref_locked(res);
spin_lock(&ns->ns_hash_lock);
tmp = tmp->next;
ldlm_resource_putref_locked(res);