On Mon, Mar 02, 2015 at 08:53:53PM +0000, Filipe Manana wrote: > If the clone root was not readonly or the dead flag was set on it, we were > leaving without decrementing the root's send_progress counter (and before > we just incremented it). If a concurrent snapshot deletion was in progress > and ended up being aborted, it would be impossible to later attempt to > delete again the snapshot, since the root's send_in_progress counter could > never go back to 0. > > We were also setting clone_sources_to_rollback to i + 1 too early - if we > bailed out because the clone root we got is not readonly or flagged as dead > we ended up later derreferencing a null pointer because we didn't assign > the clone root to sctx->clone_roots[i].root: > > for (i = 0; sctx && i < clone_sources_to_rollback; i++) > btrfs_root_dec_send_in_progress( > sctx->clone_roots[i].root); > > So just don't increment the send_in_progress counter if the root is readonly > or flagged as dead. > > Signed-off-by: Filipe Manana <fdmanana@xxxxxxxx> Reviewed-by: David Sterba <dsterba@xxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
