struct ldlm_lock;
-typedef int (*ldlm_lock_callback)(struct ldlm_lock *lock,
+typedef int (*ldlm_lock_callback)(struct lustre_handle *lockh,
struct ldlm_lock_desc *new, void *data,
__u32 data_len, struct ptlrpc_request **req);
void *data, __u32 data_len, struct ptlrpc_request **reqp);
int ldlm_cli_convert(struct ptlrpc_client *, struct lustre_handle *,
int new_mode, int *flags);
-int ldlm_cli_cancel(struct ptlrpc_client *, struct lustre_handle *);
+int ldlm_cli_cancel(struct lustre_handle *);
#endif /* __KERNEL__ */
static int ldlm_send_blocking_ast(struct ldlm_lock *lock, struct ldlm_lock *new)
{
+ struct lustre_handle lockh;
struct ldlm_lock_desc desc;
struct ptlrpc_request *req = NULL;
ENTRY;
lock->l_flags |= LDLM_FL_AST_SENT;
/* FIXME: this should merely add the lock to the lr_tmp list */
- ldlm_lock2desc(lock, &desc);
- lock->l_blocking_ast(lock, &desc, lock->l_data, lock->l_data_len, &req);
+ ldlm_lock2handle(lock, &lockh);
+ ldlm_lock2desc(new, &desc);
+ lock->l_blocking_ast(&lockh, &desc, lock->l_data, lock->l_data_len,
+ &req);
l_unlock(&lock->l_resource->lr_namespace->ns_lock);
if (req != NULL) {
* run the callback. */
if (!lock->l_readers && !lock->l_writers &&
(lock->l_flags & LDLM_FL_CBPENDING)) {
+ struct lustre_handle lockh;
+
if (!lock->l_resource->lr_namespace->ns_client) {
CERROR("LDLM_FL_CBPENDING set on non-local lock!\n");
LBUG();
"calling callback.\n");
l_unlock(&lock->l_resource->lr_namespace->ns_lock);
- lock->l_blocking_ast(lock, NULL, lock->l_data,
+ ldlm_lock2handle(lock, &lockh);
+ lock->l_blocking_ast(&lockh, NULL, lock->l_data,
lock->l_data_len, NULL);
} else
l_unlock(&lock->l_resource->lr_namespace->ns_lock);
res->lr_most_restr = lock->l_granted_mode;
if (lock->l_completion_ast) {
+ struct lustre_handle *lockh;
+
/* FIXME: this should merely add lock to lr_tmp list */
- lock->l_completion_ast(lock, NULL, lock->l_data,
+ ldlm_lock2handle(lock, &lockh);
+ lock->l_completion_ast(&lockh, NULL, lock->l_data,
lock->l_data_len, &req);
if (req != NULL) {
struct list_head *list = res->lr_tmp;
return rc;
}
-int ldlm_cli_callback(struct ldlm_lock *lock, struct ldlm_lock_desc *desc,
+int ldlm_cli_callback(struct lustre_handle *lockh, struct ldlm_lock_desc *desc,
void *data, __u32 data_len, struct ptlrpc_request **reqp)
{
struct ldlm_request *body;
return rc;
}
-int ldlm_cli_cancel(struct ptlrpc_client *cl, struct lustre_handle *lockh)
+int ldlm_cli_cancel(struct lustre_handle *lockh)
{
struct ptlrpc_request *req;
struct ldlm_lock *lock;
LBUG();
LDLM_DEBUG(lock, "client-side cancel");
- req = ptlrpc_prep_req(cl, lock->l_connection, LDLM_CANCEL, 1, &size,
- NULL);
+ req = ptlrpc_prep_req(lock->l_client, lock->l_connection, LDLM_CANCEL,
+ 1, &size, NULL);
if (!req)
GOTO(out, rc = -ENOMEM);
if (client) {
struct lustre_handle lockh;
ldlm_lock2handle(lock, &lockh);
- rc = ldlm_cli_cancel(lock->l_client, &lockh);
+ rc = ldlm_cli_cancel(&lockh);
if (rc < 0) {
CERROR("ldlm_cli_cancel: %d\n", rc);
LBUG();
ll_inode_setattr(inode, &attr, 0);
}
-static int ll_lock_callback(struct ldlm_lock *lock, struct ldlm_lock *new,
+static int ll_lock_callback(struct lustre_handle *lockh,
+ struct ldlm_lock_desc *new,
void *data, __u32 data_len,
struct ptlrpc_request **reqp)
{
- struct inode *inode = lock->l_data;
- struct lustre_handle lockh;
+ struct inode *inode = data;
ENTRY;
if (new == NULL) {
invalidate_inode_pages(inode);
up(&inode->i_sem);
- ldlm_lock2handle(lock, &lockh);
- if (ldlm_cli_cancel(lock->l_client, &lockh) < 0)
+ if (ldlm_cli_cancel(lockh) < 0)
LBUG();
RETURN(0);
}