From: bobijam Date: Wed, 9 Jul 2008 01:29:21 +0000 (+0000) Subject: Branch b1_8 X-Git-Tag: v1_8_0_110~399 X-Git-Url: https://git.whamcloud.com/gitweb?a=commitdiff_plain;h=480ec8bd5c8c54ca2bc681d75d76ac6e39d49ad3;p=fs%2Flustre-release.git Branch b1_8 b=15825 o=green i=shadow, bobijam Description: Kernel BUG tries to release flock Details : Lustre does not destroy flock lock before last reference goes away. So always drop flock locks when client is evicted and perform unlock regardless of successfulness of speaking to MDS. --- diff --git a/lustre/ChangeLog b/lustre/ChangeLog index 4b9d0f5..e178cfe 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -37,6 +37,13 @@ tbd Sun Microsystems, Inc. For more information, please refer to bugzilla 13904. Severity : normal +Bugzilla : 15825 +Description: Kernel BUG tries to release flock +Details : Lustre does not destroy flock lock before last reference goes + away. So always drop flock locks when client is evicted and + perform unlock regardless of successfulness of speaking to MDS. + +Severity : normal Bugzilla : 15210 Description: add recount protection for osc callbacks, so avoid panic on shutdown diff --git a/lustre/ldlm/ldlm_lock.c b/lustre/ldlm/ldlm_lock.c index 2c25f41..1225f2c 100644 --- a/lustre/ldlm/ldlm_lock.c +++ b/lustre/ldlm/ldlm_lock.c @@ -193,6 +193,7 @@ void ldlm_lock_add_to_lru_nolock(struct ldlm_lock *lock) struct ldlm_namespace *ns = lock->l_resource->lr_namespace; lock->l_last_used = cfs_time_current(); LASSERT(list_empty(&lock->l_lru)); + LASSERT(lock->l_resource->lr_type != LDLM_FLOCK); list_add_tail(&lock->l_lru, &ns->ns_unused_list); LASSERT(ns->ns_nr_unused >= 0); ns->ns_nr_unused++; diff --git a/lustre/llite/file.c b/lustre/llite/file.c index 2031dc4..2487e6a 100644 --- a/lustre/llite/file.c +++ b/lustre/llite/file.c @@ -2744,10 +2744,12 @@ int ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock) rc = ldlm_cli_enqueue(sbi->ll_mdc_exp, NULL, &einfo, res_id, &flock, &flags, NULL, 0, NULL, &lockh, 0); - if ((file_lock->fl_flags & FL_FLOCK) && (rc == 0)) + if ((file_lock->fl_flags & FL_FLOCK) && + (rc == 0 || file_lock->fl_type == F_UNLCK)) ll_flock_lock_file_wait(file, file_lock, (cmd == F_SETLKW)); #ifdef HAVE_F_OP_FLOCK - if ((file_lock->fl_flags & FL_POSIX) && (rc == 0) && + if ((file_lock->fl_flags & FL_POSIX) && + (rc == 0 || file_lock->fl_type == F_UNLCK) && !(flags & LDLM_FL_TEST_LOCK)) posix_lock_file_wait(file, file_lock); #endif