Re: Next step.... more guidance requested

  • From: Antti Kantee <pooka@xxxxxx>
  • To: rumpkernel-users@xxxxxxxxxxxxx
  • Date: Mon, 15 Jun 2015 10:38:40 +0000

On 15/06/15 08:16, Andrew Stuart wrote:

This is my hardcoded_jsoncfg.

static char hardcoded_jsoncfg[] = "{\"net\": {\"cloner\": \"true\", \"method\": \"dhcp\", \"type\": \"inet\", \"if\": \"xenif0\"}, \"cmdline\": \"nginx_baked.xen -c
/etc/conf/nginx.conf\", \"blk\": {\"fstype\": \"ufs\", \"source\": \"etfs\", \"path\": \"blk0\", \"mountpoint\": \"/etc\"}}”;

Good, now it's easy to reason about what is happening.

So when you specify "path": "blk0", it gets mapped to some Xen identifier. When I wrote the rump kernel hypercalls for Xen, I did the mapping from "blk<n>" to the Xen vbd this way:

int devnum = 768 + (num<<6);
https://github.com/rumpkernel/rumprun/blob/master/platform/xen/rumphyper_bio.c#L66

... because, while slightly odd, it seemed to work, and the main interest was getting the entire stack to run. Then I forgot to come back and make it work properly.

Now, if we look at your log from a few mails ago:

vbd 2049 is hd0
...
vbd 2128 is hd1
...
vbd 2144 is hd2

Since none of those are "768", using "blk0" doesn't work and you get your error:

Failed to read device/vbd/832/backend-id.
...
rumprun: etfs register for "blk1" failed: 5

Though, I assume that log is from when you were using path=blk1 instead of blk0...

So, in other words, the observation that made during original porting to Xen where vbd=768+(n<<6) does not hold on EC2. We/I need to fix the mapping between block device 0, 1, ... and Xen vbd. And that requires the person fixing the thing to know wtf vbd actually consists of ;)

Until it gets fixed properly, assuming EC2 gives you the same vbd id every time (2049), you can just hardcode the num->devnum calculation in the code location I linked above and see if that gets you further.

Other related posts: