 +
 +static void unlock_resource(struct dlm_resource *r)
 +{
-+	do_dlm_unlock_sync(r->update);
-+	delete_lp(r->update);
++	dlm_lock_t *lp = r->update;
++
++	set_bit(LFL_NOBAST, &lp->flags);
++	set_bit(LFL_INLOCK, &lp->flags);
++	lp->req = DLM_LOCK_NL;
++	lp->lkf = DLM_LKF_CONVERT;
++	do_dlm_lock_sync(lp, NULL);
++	keep_null_lock(r->dlm, lp);
++	r->update = NULL;
 +}
 +
 +static struct dlm_resource *search_resource(dlm_t *dlm, struct lm_lockname *name)

+	lm_owner:THIS_MODULE,
+};
diff -urN linux-orig/fs/gfs_locking/lock_dlm/plock.c linux-patched/fs/gfs_locking/lock_dlm/plock.c
--- linux-orig/fs/gfs_locking/lock_dlm/plock.c	1969-12-31 18:00:00.000000000 -0600
+++ linux-patched/fs/gfs_locking/lock_dlm/plock.c	2004-10-21 18:18:28.611576770 -0500
@@ -0,0 +1,1053 @@
+/******************************************************************************
+*******************************************************************************
+**

+
+#endif
diff -urN linux-orig/fs/gfs_locking/lock_dlm/main.c linux-patched/fs/gfs_locking/lock_dlm/main.c
--- linux-orig/fs/gfs_locking/lock_dlm/main.c	1970-01-01 07:30:00.000000000 +0730
+++ linux-patched/fs/gfs_locking/lock_dlm/main.c	2004-10-22 21:20:30.000000000 +0800
@@ -0,0 +1,302 @@
+/******************************************************************************
+*******************************************************************************
+**
