[linux-lvm] pv_move_pe() error again :/
Ragnar Kjørstad
lvm at ragnark.vestdata.no
Sun Sep 9 22:16:43 UTC 2001
OK, this is the patch.
With this patch pe_move will not even try to lock the extent before
moving it. (because it would fail). I'm not sure exactly what
implications that has, but I would avoid using LVM when you're running
pe_move. I also removed the code that unlock the extent - but only for
the standard execution path - if any other errors occur pe_move will try
to unlock the extent.
Another problem is that the file possition in the source is undefined
after a failed read - so if you move several extents at the same time,
chances are that pe_move will read the broken extent over and over
again, instead of reading first the broken extent and then other extent
- it will in other words destroy your data.
This patch was written specificly to fix a problem with LVM on one of
our workstations, and it is not intended for general use! If you still
choose to try it, i recommend first moving all the extents you can move
with the regular pe_move command - then install this one and move the
remaining extents one by one.
Be aware that you have to do make install to use it (or use
LD_LIBRARY_PATH), as the library is linken in dynamicly - if you do make
install - be sure to install the proper utilities afterwards so you
don't risk running this modified pe_move by accident later.
You have been warned....
--
Ragnar Kjorstad
Big Storage
-------------- next part --------------
diff -u -r LVM/1.0.1-rc2/tools/lib/pv_move.c LVM_ignore_read_errors/1.0.1-rc2/tools/lib/pv_move.c
--- LVM/1.0.1-rc2/tools/lib/pv_move.c Thu Jul 19 17:19:01 2001
+++ LVM_ignore_read_errors/1.0.1-rc2/tools/lib/pv_move.c Mon Sep 10 00:06:47 2001
@@ -494,12 +494,14 @@
if ( opt_t == 0) {
int lv_num = vg->pv[dst_pv_index]->pe[pe_dest].lv_num;
+/* Don't even try to lock
if ( ( ret = pe_lock ( vg->vg_name, vg->pv[src_pv_index]->pv_dev,
le_remap_req.old_pe, vg->vg_number,
lv_num, vg->lv[lv_num-1]->lv_dev)) < 0) {
ret = -LVM_EPV_MOVE_PE_LOCK;
- goto pv_move_pe_end;
+ goto pv_move_pe_end;
}
+*/
}
@@ -521,9 +523,13 @@
fprintf ( stderr, "%s -- ERROR reading input "
"physical volume \"%s\" (still %d bytes to read)\n\n",
cmd, vg->pv[src_pv_index]->pv_name, size);
+ fprintf( stderr, " -- IGNORED \n");
+ /*
pe_unlock ( vg->vg_name);
ret = -LVM_EPV_MOVE_PE_READ_IN;
goto pv_move_pe_end;
+ */
+ red=to_read;
}
to_write = red;
}
@@ -570,8 +576,9 @@
cmd, lvm_error ( ret),
pe_source,
vg->pv[src_pv_index]->pv_name);
- ret = -LVM_EPV_MOVE_PE_UNLOCK;
- goto pv_move_pe_end;
+ fprintf( stderr, "IGNORED\n");
+ /* ret = -LVM_EPV_MOVE_PE_UNLOCK;
+ goto pv_move_pe_end; */
}
}
More information about the linux-lvm
mailing list