___wait_on_page(page);
}
-int gen_copy_data(struct obd_conn *conn, obdattr *src, obdattr *tgt)
+/* XXX this should return errors correctly, so should migrate!!! */
+int gen_copy_data(struct obd_conn *conn, obdattr *tgt, obdattr *src)
{
struct page *page;
unsigned long index = 0;
int rc;
+ ENTRY;
+ CDEBUG(D_INODE, "src: ino %ld blocks %ld, size %Ld, dst: ino %ld\n",
+ src->i_ino, src->i_blocks, src->i_size, tgt->i_ino);
page = alloc_page(GFP_USER);
- if ( !page )
+ if ( !page ) {
+ EXIT;
return -ENOMEM;
-
+ }
lck_page(page);
- while (index < src->i_size / PAGE_SIZE) {
+ while (index < ((src->i_size + PAGE_SIZE - 1) >> PAGE_SHIFT)) {
page->index = index;
rc = OBP(conn->oc_dev, brw)(READ, conn, src, page, 0);
rc = OBP(conn->oc_dev,brw)(WRITE, conn, tgt, page, 1);
if ( rc != PAGE_SIZE)
break;
+
+ CDEBUG(D_INODE, "Copied page %d ...\n", index);
index ++;
}
UnlockPage(page);
__free_page(page);
+ EXIT;
return 0;
}