diff --git a/lustre/ChangeLog b/lustre/ChangeLog index 73ef20b57792d6c548272d930fcfbcf1c5f48366..96b469dcefaab99d93ff4679dbc487cd42c27461 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -478,6 +478,13 @@ Details : On SLES10/PPC, fs.h includes idr.h which requires BITS_PER_LONG to be defined. Add a hack in mkfs_lustre.c to work around this compile issue. +Severity : normal +Bugzilla : 14257 +Description: LASSERT on MDS when client holding flock lock dies +Details : ldlm pool logic depends on number of granted locks equal to + number of released locks which is not true for flock locks, so + just exclude such locks from consideration. + -------------------------------------------------------------------------------- 2007-12-07 Cluster File Systems, Inc. <info@clusterfs.com> diff --git a/lustre/ldlm/ldlm_pool.c b/lustre/ldlm/ldlm_pool.c index 541afe19fc2f5081c547aa937ea1b7dfb0d60ce7..dcae25431d4861cae71dd511cd3d056c41917ebd 100644 --- a/lustre/ldlm/ldlm_pool.c +++ b/lustre/ldlm/ldlm_pool.c @@ -667,7 +667,15 @@ EXPORT_SYMBOL(ldlm_pool_fini); void ldlm_pool_add(struct ldlm_pool *pl, struct ldlm_lock *lock) { + /* FLOCK locks are special in a sense that they are almost never + * cancelled, instead special kind of lock is used to drop them. + * also there is no LRU for flock locks, so no point in tracking + * them anyway */ + if (lock->l_resource->lr_type == LDLM_FLOCK) + return; + ENTRY; + atomic_inc(&pl->pl_granted); atomic_inc(&pl->pl_grant_rate); atomic_inc(&pl->pl_grant_speed); @@ -686,6 +694,8 @@ EXPORT_SYMBOL(ldlm_pool_add); void ldlm_pool_del(struct ldlm_pool *pl, struct ldlm_lock *lock) { + if (lock->l_resource->lr_type == LDLM_FLOCK) + return; ENTRY; LASSERT(atomic_read(&pl->pl_granted) > 0); atomic_dec(&pl->pl_granted);