Whamcloud - gitweb
Fixed minor typo in gen_copy_data().
[fs/lustre-release.git] / lustre / obdclass / genops.c
index 06992c1..bfc3499 100644 (file)
@@ -199,22 +199,27 @@ void lck_page(struct page *page)
                 ___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 offset = 0;
+       unsigned long index = 0;
        int rc;
+       ENTRY;
 
-       page = __get_pages(GFP_USER, 0);
-       if ( !page ) 
+       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 ) {
+               EXIT;
                return -ENOMEM;
-
+       }
        
        lck_page(page);
        
-       while (offset < src->i_size) {
+       while (index < ((src->i_size + PAGE_SIZE - 1) >> PAGE_SHIFT)) {
                
-               page->offset = offset;
+               page->index = index;
                rc = OBP(conn->oc_dev, brw)(READ, conn, src, page, 0);
 
                if ( rc != PAGE_SIZE ) 
@@ -223,13 +228,16 @@ int gen_copy_data(struct obd_conn *conn, obdattr *src, obdattr *tgt)
                rc = OBP(conn->oc_dev,brw)(WRITE, conn, tgt, page, 1);
                if ( rc != PAGE_SIZE)
                        break;
+
+               CDEBUG(D_INODE, "Copied page %d ...\n", index);
                
-               offset += rc;
+               index ++;
        }
        tgt->i_size = src->i_size;
        tgt->i_blocks = src->i_blocks;
        UnlockPage(page);
        __free_page(page);
 
+       EXIT;
        return 0;
 }