* [Qemu-devel] [PATCH] qemu-io: add flag to mark files growable @ 2009-07-04 15:53 Christoph Hellwig 2009-07-06 8:53 ` Kevin Wolf 0 siblings, 1 reply; 7+ messages in thread From: Christoph Hellwig @ 2009-07-04 15:53 UTC (permalink / raw) To: qemu-devel Add a -g flag to the open command and the main qemu-io command line to allow opening a file growable. This is only allowed for protocols, mirroring the limitation exposed through bdrv_file_open. Signed-off-by: Christoph Hellwig <hch@lst.de> Index: qemu/qemu-io.c =================================================================== --- qemu.orig/qemu-io.c 2009-07-04 17:42:16.505239002 +0200 +++ qemu/qemu-io.c 2009-07-04 17:52:26.432241152 +0200 @@ -1172,7 +1172,7 @@ static const cmdinfo_t close_cmd = { .oneline = "close the current open file", }; -static int openfile(char *name, int flags) +static int openfile(char *name, int flags, int growable) { if (bs) { fprintf(stderr, "file open already, try 'help close'\n"); @@ -1189,6 +1189,16 @@ static int openfile(char *name, int flag return 1; } + + if (growable) { + if (!bs->drv || !bs->drv->protocol_name) { + fprintf(stderr, + "%s: only protocols can be opened growable\n", + progname); + } + bs->growable = 1; + } + return 0; } @@ -1207,6 +1217,7 @@ open_help(void) " -r, -- open file read-only\n" " -s, -- use snapshot file\n" " -n, -- disable host cache\n" +" -g, -- allow file to grow (only applies to protocols)" "\n"); } @@ -1217,9 +1228,10 @@ open_f(int argc, char **argv) { int flags = 0; int readonly = 0; + int growable = 0; int c; - while ((c = getopt(argc, argv, "snCr")) != EOF) { + while ((c = getopt(argc, argv, "snCrg")) != EOF) { switch (c) { case 's': flags |= BDRV_O_SNAPSHOT; @@ -1233,6 +1245,9 @@ open_f(int argc, char **argv) case 'r': readonly = 1; break; + case 'g': + growable = 1; + break; default: return command_usage(&open_cmd); } @@ -1246,7 +1261,7 @@ open_f(int argc, char **argv) if (optind != argc - 1) return command_usage(&open_cmd); - return openfile(argv[optind], flags); + return openfile(argv[optind], flags, growable); } static const cmdinfo_t open_cmd = { @@ -1306,7 +1321,8 @@ static void usage(const char *name) int main(int argc, char **argv) { int readonly = 0; - const char *sopt = "hVc:Crsnm"; + int growable = 0; + const char *sopt = "hVc:Crsnmg"; struct option lopt[] = { { "help", 0, 0, 'h' }, { "version", 0, 0, 'V' }, @@ -1317,6 +1333,7 @@ int main(int argc, char **argv) { "snapshot", 0, 0, 's' }, { "nocache", 0, 0, 'n' }, { "misalign", 0, 0, 'm' }, + { "growable", 0, 0, 'g' }, { NULL, 0, 0, 0 } }; int c; @@ -1345,6 +1362,9 @@ int main(int argc, char **argv) case 'm': misalign = 1; break; + case 'g': + growable = 1; + break; case 'V': printf("%s version %s\n", progname, VERSION); exit(0); @@ -1392,7 +1412,7 @@ int main(int argc, char **argv) flags |= BDRV_O_RDWR; if ((argc - optind) == 1) - openfile(argv[optind], flags); + openfile(argv[optind], flags, growable); command_loop(); /* ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH] qemu-io: add flag to mark files growable 2009-07-04 15:53 [Qemu-devel] [PATCH] qemu-io: add flag to mark files growable Christoph Hellwig @ 2009-07-06 8:53 ` Kevin Wolf 2009-07-06 10:20 ` Christoph Hellwig 0 siblings, 1 reply; 7+ messages in thread From: Kevin Wolf @ 2009-07-06 8:53 UTC (permalink / raw) To: Christoph Hellwig; +Cc: qemu-devel Christoph Hellwig schrieb: > Add a -g flag to the open command and the main qemu-io command line to > allow opening a file growable. This is only allowed for protocols, > mirroring the limitation exposed through bdrv_file_open. This limitation doesn't look quite right. I'm not sure if growable images are used anywhere else, too, but their main usage is for the image file access in formats like qcow - that is, growable images are usually raw. And raw didn't have a protocol name until recently. > > > Signed-off-by: Christoph Hellwig <hch@lst.de> > > > Index: qemu/qemu-io.c > =================================================================== > --- qemu.orig/qemu-io.c 2009-07-04 17:42:16.505239002 +0200 > +++ qemu/qemu-io.c 2009-07-04 17:52:26.432241152 +0200 > @@ -1172,7 +1172,7 @@ static const cmdinfo_t close_cmd = { > .oneline = "close the current open file", > }; > > -static int openfile(char *name, int flags) > +static int openfile(char *name, int flags, int growable) > { > if (bs) { > fprintf(stderr, "file open already, try 'help close'\n"); > @@ -1189,6 +1189,16 @@ static int openfile(char *name, int flag > return 1; > } > > + > + if (growable) { > + if (!bs->drv || !bs->drv->protocol_name) { > + fprintf(stderr, > + "%s: only protocols can be opened growable\n", > + progname); > + } > + bs->growable = 1; But you don't seem to enforce the limitation anyway, so in the end everything works. ;-) Kevin ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH] qemu-io: add flag to mark files growable 2009-07-06 8:53 ` Kevin Wolf @ 2009-07-06 10:20 ` Christoph Hellwig 2009-07-06 10:40 ` Kevin Wolf 0 siblings, 1 reply; 7+ messages in thread From: Christoph Hellwig @ 2009-07-06 10:20 UTC (permalink / raw) To: Kevin Wolf; +Cc: Christoph Hellwig, qemu-devel On Mon, Jul 06, 2009 at 10:53:53AM +0200, Kevin Wolf wrote: > Christoph Hellwig schrieb: > > Add a -g flag to the open command and the main qemu-io command line to > > allow opening a file growable. This is only allowed for protocols, > > mirroring the limitation exposed through bdrv_file_open. > > This limitation doesn't look quite right. I'm not sure if growable > images are used anywhere else, too, but their main usage is for the > image file access in formats like qcow - that is, growable images are > usually raw. And raw didn't have a protocol name until recently. It does have a protocol now, and the way current qemu is implemented growable is only set from bdrv_file_open, which implies the BDRV_O_FILE argument to bdrv_open2, which means we use find_protocol to find the BlockDriver and find_protocol needs protocol_name set. If you want to backport this patch to a qemu version that doesn't have a protocol_name for raw you'll have to adjust it to whatever check is correct in that version. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH] qemu-io: add flag to mark files growable 2009-07-06 10:20 ` Christoph Hellwig @ 2009-07-06 10:40 ` Kevin Wolf 2009-07-06 10:51 ` Christoph Hellwig 0 siblings, 1 reply; 7+ messages in thread From: Kevin Wolf @ 2009-07-06 10:40 UTC (permalink / raw) To: Christoph Hellwig; +Cc: qemu-devel Christoph Hellwig schrieb: > On Mon, Jul 06, 2009 at 10:53:53AM +0200, Kevin Wolf wrote: >> Christoph Hellwig schrieb: >>> Add a -g flag to the open command and the main qemu-io command line to >>> allow opening a file growable. This is only allowed for protocols, >>> mirroring the limitation exposed through bdrv_file_open. >> This limitation doesn't look quite right. I'm not sure if growable >> images are used anywhere else, too, but their main usage is for the >> image file access in formats like qcow - that is, growable images are >> usually raw. And raw didn't have a protocol name until recently. > > It does have a protocol now, and the way current qemu is implemented > growable is only set from bdrv_file_open, which implies the BDRV_O_FILE > argument to bdrv_open2, which means we use find_protocol to find the > BlockDriver and find_protocol needs protocol_name set. > > If you want to backport this patch to a qemu version that doesn't > have a protocol_name for raw you'll have to adjust it to whatever check > is correct in that version. Ok, you are right. raw was the only exception because it could be used as a protocol even though it didn't have a protocol name. Looks fine to me then if you enforce the limitation instead of only printing an error message and opening the image anyway. Not printing the error and opening the image would be fine either. I just don't like error messages without errors. Kevin ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH] qemu-io: add flag to mark files growable 2009-07-06 10:40 ` Kevin Wolf @ 2009-07-06 10:51 ` Christoph Hellwig 2009-07-06 11:04 ` Kevin Wolf 0 siblings, 1 reply; 7+ messages in thread From: Christoph Hellwig @ 2009-07-06 10:51 UTC (permalink / raw) To: Kevin Wolf; +Cc: Christoph Hellwig, qemu-devel On Mon, Jul 06, 2009 at 12:40:06PM +0200, Kevin Wolf wrote: > Ok, you are right. raw was the only exception because it could be used > as a protocol even though it didn't have a protocol name. > > Looks fine to me then if you enforce the limitation instead of only > printing an error message and opening the image anyway. Not printing the > error and opening the image would be fine either. I just don't like > error messages without errors. Well, the primary use of qemu-iotests is to try out the I/O patterns, and the -g option is to check out we do the correct thing for growable files, so I'd really prefer it to fail if we're not allow to actually make it growable. Now one think I could do is to just add a growable flag to the BlockDriver to make it explicit. Currently only raw files (in the posix and win32 flavours) would set it. That would also fix the bug what we currenly allow to grow host devices even if we can't. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH] qemu-io: add flag to mark files growable 2009-07-06 10:51 ` Christoph Hellwig @ 2009-07-06 11:04 ` Kevin Wolf 2009-07-06 11:14 ` Christoph Hellwig 0 siblings, 1 reply; 7+ messages in thread From: Kevin Wolf @ 2009-07-06 11:04 UTC (permalink / raw) To: Christoph Hellwig; +Cc: qemu-devel Christoph Hellwig schrieb: > On Mon, Jul 06, 2009 at 12:40:06PM +0200, Kevin Wolf wrote: >> Ok, you are right. raw was the only exception because it could be used >> as a protocol even though it didn't have a protocol name. >> >> Looks fine to me then if you enforce the limitation instead of only >> printing an error message and opening the image anyway. Not printing the >> error and opening the image would be fine either. I just don't like >> error messages without errors. > > Well, the primary use of qemu-iotests is to try out the I/O patterns, > and the -g option is to check out we do the correct thing for growable > files, so I'd really prefer it to fail if we're not allow to actually > make it growable. Perfectly reasonable. But then make it really fail. > Now one think I could do is to just add a growable flag to the > BlockDriver to make it explicit. Currently only raw files (in the posix > and win32 flavours) would set it. Good point actually, your current logic is wrong: raw-win32 doesn't have the file protocol. I'm not sure though if introducing a new flag just for qemu-io is right. After all qemu-io should test what the drivers provide to qemu and not extend them to work with qemu-io. Currently the drivers don't have the concept of non-growable images. > That would also fix the bug what we > currenly allow to grow host devices even if we can't. How that? The host device drivers don't have a protocol name, do they? Kevin ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH] qemu-io: add flag to mark files growable 2009-07-06 11:04 ` Kevin Wolf @ 2009-07-06 11:14 ` Christoph Hellwig 0 siblings, 0 replies; 7+ messages in thread From: Christoph Hellwig @ 2009-07-06 11:14 UTC (permalink / raw) To: Kevin Wolf; +Cc: Christoph Hellwig, qemu-devel On Mon, Jul 06, 2009 at 01:04:55PM +0200, Kevin Wolf wrote: > > Well, the primary use of qemu-iotests is to try out the I/O patterns, > > and the -g option is to check out we do the correct thing for growable > > files, so I'd really prefer it to fail if we're not allow to actually > > make it growable. > > Perfectly reasonable. But then make it really fail. Oh, now I see your complaint. The lack of a return 1 after the error message was not intentional - I've added it now. > > Now one think I could do is to just add a growable flag to the > > BlockDriver to make it explicit. Currently only raw files (in the posix > > and win32 flavours) would set it. > > Good point actually, your current logic is wrong: raw-win32 doesn't have > the file protocol. I'm not sure though if introducing a new flag just > for qemu-io is right. After all qemu-io should test what the drivers > provide to qemu and not extend them to work with qemu-io. Currently the > drivers don't have the concept of non-growable images. True. I'll stick to the current one with the added error return. win32 raw should probably grow a protocol name, but I'll leave that to people who can actually test win32. > > That would also fix the bug what we > > currenly allow to grow host devices even if we can't. > > How that? The host device drivers don't have a protocol name, do they? They don't, I was confused. Updated patch below: Index: qemu/qemu-io.c =================================================================== --- qemu.orig/qemu-io.c 2009-07-06 13:09:45.223364426 +0200 +++ qemu/qemu-io.c 2009-07-06 13:11:41.347269140 +0200 @@ -1172,7 +1172,7 @@ static const cmdinfo_t close_cmd = { .oneline = "close the current open file", }; -static int openfile(char *name, int flags) +static int openfile(char *name, int flags, int growable) { if (bs) { fprintf(stderr, "file open already, try 'help close'\n"); @@ -1189,6 +1189,17 @@ static int openfile(char *name, int flag return 1; } + + if (growable) { + if (!bs->drv || !bs->drv->protocol_name) { + fprintf(stderr, + "%s: only protocols can be opened growable\n", + progname); + return 1; + } + bs->growable = 1; + } + return 0; } @@ -1207,6 +1218,7 @@ open_help(void) " -r, -- open file read-only\n" " -s, -- use snapshot file\n" " -n, -- disable host cache\n" +" -g, -- allow file to grow (only applies to protocols)" "\n"); } @@ -1217,9 +1229,10 @@ open_f(int argc, char **argv) { int flags = 0; int readonly = 0; + int growable = 0; int c; - while ((c = getopt(argc, argv, "snCr")) != EOF) { + while ((c = getopt(argc, argv, "snCrg")) != EOF) { switch (c) { case 's': flags |= BDRV_O_SNAPSHOT; @@ -1233,6 +1246,9 @@ open_f(int argc, char **argv) case 'r': readonly = 1; break; + case 'g': + growable = 1; + break; default: return command_usage(&open_cmd); } @@ -1246,7 +1262,7 @@ open_f(int argc, char **argv) if (optind != argc - 1) return command_usage(&open_cmd); - return openfile(argv[optind], flags); + return openfile(argv[optind], flags, growable); } static const cmdinfo_t open_cmd = { @@ -1306,7 +1322,8 @@ static void usage(const char *name) int main(int argc, char **argv) { int readonly = 0; - const char *sopt = "hVc:Crsnm"; + int growable = 0; + const char *sopt = "hVc:Crsnmg"; struct option lopt[] = { { "help", 0, 0, 'h' }, { "version", 0, 0, 'V' }, @@ -1317,6 +1334,7 @@ int main(int argc, char **argv) { "snapshot", 0, 0, 's' }, { "nocache", 0, 0, 'n' }, { "misalign", 0, 0, 'm' }, + { "growable", 0, 0, 'g' }, { NULL, 0, 0, 0 } }; int c; @@ -1345,6 +1363,9 @@ int main(int argc, char **argv) case 'm': misalign = 1; break; + case 'g': + growable = 1; + break; case 'V': printf("%s version %s\n", progname, VERSION); exit(0); @@ -1392,7 +1413,7 @@ int main(int argc, char **argv) flags |= BDRV_O_RDWR; if ((argc - optind) == 1) - openfile(argv[optind], flags); + openfile(argv[optind], flags, growable); command_loop(); /* ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2009-07-06 11:14 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-07-04 15:53 [Qemu-devel] [PATCH] qemu-io: add flag to mark files growable Christoph Hellwig 2009-07-06 8:53 ` Kevin Wolf 2009-07-06 10:20 ` Christoph Hellwig 2009-07-06 10:40 ` Kevin Wolf 2009-07-06 10:51 ` Christoph Hellwig 2009-07-06 11:04 ` Kevin Wolf 2009-07-06 11:14 ` Christoph Hellwig
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).