/* page.c */
inline void lustre_put_page(struct page *page);
struct page * lustre_get_page(struct inode *dir, unsigned long n);
-void lustre_prepare_page(unsigned from, unsigned to, struct page *page);
+int lustre_prepare_page(unsigned from, unsigned to, struct page *page);
int lustre_commit_page(struct page *page, unsigned from, unsigned to);
#endif
return ERR_PTR(-EIO);
}
-void lustre_prepare_page(unsigned from, unsigned to, struct page *page)
+int lustre_prepare_page(unsigned from, unsigned to, struct page *page)
{
int err;
if (err) {
CERROR("page index %ld from %d to %d err %d\n",
page->index, from, to, err);
- BUG();
}
-
+ return err;
}
int lustre_commit_page(struct page *page, unsigned from, unsigned to)
wake_up(&mds->mds_done_waitq);
interruptible_sleep_on(&mds->mds_waitq);
- barrier();
- CDEBUG(D_INODE, "lustre_mds wakes\n");
- CDEBUG(D_INODE, "pick up req here and continue\n");
+ CDEBUG(D_INODE, "mds_wakes pick up req here and continue\n");
if (mds->mds_service != NULL) {
ptl_event_t ev;
(cmd, &conn, objcount, (struct obd_ioobj *)tmp1,
niocount, (struct niobuf *)tmp2, (struct niobuf *)res);
+ if (req->rq_rep.ost->result) {
+ EXIT;
+ goto out;
+ }
+
if (cmd == OBD_BRW_WRITE) {
for (i=0; i<niocount; i++) {
src = &((struct niobuf *)tmp2)[i];
(void *)(unsigned long)src->addr,
src->len);
}
+ barrier();
} else {
for (i=0; i<niocount; i++) {
dst = &((struct niobuf *)tmp2)[i];
(void *)(unsigned long)src->addr,
PAGE_SIZE);
}
+ barrier();
}
req->rq_rep.ost->result =
(cmd, &conn, objcount, (struct obd_ioobj *)tmp1,
niocount, (struct niobuf *)res);
+ out:
EXIT;
return 0;
}
wake_up(&ost->ost_done_waitq);
interruptible_sleep_on(&ost->ost_waitq);
barrier();
- CDEBUG(D_INODE, "lustre_ost wakes\n");
- CDEBUG(D_INODE, "pick up req here and continue\n");
+ CDEBUG(D_INODE, "ost_wakes: pick up req here and continue\n");
if (ost->ost_service != NULL) {
ptl_event_t ev;
- CDEBUG(D_INODE, "\n");
while (1) {
struct ptlrpc_request request;
struct ptlrpc_service *service;
- CDEBUG(D_INODE, "\n");
rc = PtlEQGet(ost->ost_service->srv_eq_h, &ev);
if (rc != PTL_OK && rc != PTL_EQ_DROPPED)
break;
- CDEBUG(D_INODE, "\n");
service = (struct ptlrpc_service *)ev.mem_desc.user_ptr;