+static int ll_lock_callback(struct ldlm_lock *lock, struct ldlm_lock *new,
+ void *data, __u32 data_len,
+ struct ptlrpc_request **reqp)
+{
+ struct inode *inode = lock->l_data;
+ ENTRY;
+
+ if (new == NULL) {
+ /* Completion AST. Do nothing. */
+ RETURN(0);
+ }
+
+ if (data_len != sizeof(struct inode))
+ LBUG();
+
+ /* FIXME: do something better than throwing away everything */
+ if (inode == NULL)
+ LBUG();
+ down(&inode->i_sem);
+ CDEBUG(D_INODE, "invalidating obdo/inode %ld\n", inode->i_ino);
+ invalidate_inode_pages(inode);
+ up(&inode->i_sem);
+
+ if (ldlm_cli_cancel(lock->l_client, lock) < 0)
+ LBUG();
+ RETURN(0);
+}
+