read-only vblade storage Reference: /n/atom/patch/applied/vbladero Date: Thu Mar 13 15:13:42 CET 2014 Signed-off-by: quanstro@quansto.net --- /sys/man/8/vblade Thu Mar 13 15:13:28 2014 +++ /sys/man/8/vblade Thu Mar 13 15:13:28 2014 @@ -4,7 +4,7 @@ .SH SYNOPSIS .B vblade [ -.B -ir +.B -iro ] [ .B -s .I size @@ -50,6 +50,9 @@ Raw. Do not use a configuration header. This is useful when exporting a device or file not generally exported by .IR vblade . +.TP +.B -o +Read only. Do now allow writes to the backing store. .TP .BI -s " n" The exported target will have size --- /sys/src/cmd/vblade/vblade.c Thu Mar 13 15:13:28 2014 +++ /sys/src/cmd/vblade/vblade.c Thu Mar 13 15:13:28 2014 @@ -36,6 +36,7 @@ struct Conf { int iflag; + int oflag; int flag; int shelf; int slot; @@ -211,11 +212,14 @@ } void -checkfile(char *s, Vblade *vb, int iflag) +checkfile(char *s, Vblade *vb, int iflag, int oflag) { char *e; - vb->fd = open(s, ORDWR); + if(oflag) + vb->fd = open(s, OREAD); + else + vb->fd = open(s, ORDWR); if(vb->fd == -1) sysfatal("can't open backing store: %r"); if(iflag == 0 && (e = chkvblade(vb->fd, vb))) @@ -751,7 +755,7 @@ void usage(void) { - fprint(2, "vblade [-ir] [-s size] [-a shelf.slot] [-m mask] [-c config] [-e ether] file\n"); + fprint(2, "vblade [-iro] [-s size] [-a shelf.slot] [-m mask] [-c config] [-e ether] file\n"); exits("usage"); } @@ -765,7 +769,7 @@ vblade->nmask = c->nmask; vblade->mask = c->mask; } - checkfile(file, vblade, c->iflag); + checkfile(file, vblade, c->iflag, c->oflag); vblade->flag = c->flag; if(c->shelf != -1){ @@ -801,7 +805,7 @@ for(;;){ if(nblade == nelem(vblade)) sysfatal("too many blades"); - c = (Conf){0, 0, -1, -1, 0, 0, nil, nil}; + c = (Conf){0, 0, 0, -1, -1, 0ull, 0, nil, nil}; lastc = 0; ARGBEGIN{ case 'a': @@ -842,6 +846,10 @@ case 's': lastc = 's'; c.maxlba = sizetolba(getsize(EARGF(usage()))); + break; + case 'o': + lastc = 'o'; + c.oflag = 1; break; default: lastc = '?';