Whamcloud - gitweb
Branch b1_6
authorbobijam <bobijam>
Wed, 9 Jul 2008 01:31:13 +0000 (01:31 +0000)
committerbobijam <bobijam>
Wed, 9 Jul 2008 01:31:13 +0000 (01:31 +0000)
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.

lustre/ChangeLog
lustre/ldlm/ldlm_lock.c
lustre/llite/file.c

index 7e8525a..46be4f4 100644 (file)
@@ -36,6 +36,13 @@ tbd Sun Microsystems, Inc.
                'tunefs.lustre --param="ost.quota_type=ug2" $MDTDEV'            
          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   : enhancement
 Bugzilla   : 16189
 Description: Update to RHEL4 kernel-2.6.9-67.0.20.
index 2c25f41..1225f2c 100644 (file)
@@ -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++;
index 66e4f8a..36f15fb 100644 (file)
@@ -2745,10 +2745,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