Whamcloud - gitweb
LU-8347 ldlm: granting conflicting locks
[fs/lustre-release.git] / lustre / ldlm / ldlm_lockd.c
index 98c3d80..c2a420d 100644 (file)
  *
  * You should have received a copy of the GNU General Public License
  * version 2 along with this program; If not, see
- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
+ * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * GPL HEADER END
  */
@@ -206,7 +202,7 @@ static int expired_lock_main(void *arg)
 
                        lock = list_entry(expired->next, struct ldlm_lock,
                                          l_pending_chain);
-                       if ((void *)lock < LP_POISON + PAGE_CACHE_SIZE &&
+                       if ((void *)lock < LP_POISON + PAGE_SIZE &&
                            (void *)lock >= LP_POISON) {
                                spin_unlock_bh(&waiting_locks_spinlock);
                                CERROR("free lock on elt list %p\n", lock);
@@ -214,7 +210,7 @@ static int expired_lock_main(void *arg)
                        }
                        list_del_init(&lock->l_pending_chain);
                        if ((void *)lock->l_export <
-                            LP_POISON + PAGE_CACHE_SIZE &&
+                            LP_POISON + PAGE_SIZE &&
                            (void *)lock->l_export >= LP_POISON) {
                                CERROR("lock with free export on elt list %p\n",
                                       lock->l_export);
@@ -854,6 +850,11 @@ int ldlm_server_blocking_ast(struct ldlm_lock *lock,
                 /* Don't need to do anything here. */
                 RETURN(0);
 
+       if (OBD_FAIL_PRECHECK(OBD_FAIL_LDLM_SRV_BL_AST)) {
+               LDLM_DEBUG(lock, "dropping BL AST");
+               RETURN(0);
+       }
+
         LASSERT(lock);
         LASSERT(data != NULL);
         if (lock->l_export->exp_obd->obd_recovering != 0)
@@ -2522,15 +2523,15 @@ static int ldlm_revoke_lock_cb(struct cfs_hash *hs, struct cfs_hash_bd *bd,
 void ldlm_revoke_export_locks(struct obd_export *exp)
 {
        struct list_head  rpc_list;
-        ENTRY;
+       ENTRY;
 
        INIT_LIST_HEAD(&rpc_list);
-        cfs_hash_for_each_empty(exp->exp_lock_hash,
-                                ldlm_revoke_lock_cb, &rpc_list);
-        ldlm_run_ast_work(exp->exp_obd->obd_namespace, &rpc_list,
-                          LDLM_WORK_REVOKE_AST);
+       cfs_hash_for_each_nolock(exp->exp_lock_hash,
+                                ldlm_revoke_lock_cb, &rpc_list, 0);
+       ldlm_run_ast_work(exp->exp_obd->obd_namespace, &rpc_list,
+                         LDLM_WORK_REVOKE_AST);
 
-        EXIT;
+       EXIT;
 }
 EXPORT_SYMBOL(ldlm_revoke_export_locks);
 #endif /* HAVE_SERVER_SUPPORT */