X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fobdclass%2Fgenops.c;h=5196a9b5f528804d8dfa9b0de799e483f6d53872;hb=557e7ff6df1b53fba20d7ac39f1f41cffb369d49;hp=06992c15b164c7c3dd7178e8334725a5bc750a23;hpb=f94ced5f79da783e38717813a58716906d0269f2;p=fs%2Flustre-release.git diff --git a/lustre/obdclass/genops.c b/lustre/obdclass/genops.c index 06992c1..5196a9b 100644 --- a/lustre/obdclass/genops.c +++ b/lustre/obdclass/genops.c @@ -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: blocks %ld, size %Ld\n", + src->i_blocks, src->i_size); + 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 1 page ...\n"); - offset += rc; + index ++; } tgt->i_size = src->i_size; tgt->i_blocks = src->i_blocks; UnlockPage(page); __free_page(page); + EXIT; return 0; }