On Wed, Oct 17, 2018 at 06:41:58PM +0200, Kevin Wolf wrote: > If read-only=off, but auto-read-only=on is given, open the file > read-write if we have the permissions, but instead of erroring out for > read-only files, just degrade to read-only. > > Signed-off-by: Kevin Wolf <kw...@redhat.com> > --- > block/gluster.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/block/gluster.c b/block/gluster.c > index 4fd55a9cc5..5e300c96c8 100644 > --- a/block/gluster.c > +++ b/block/gluster.c > @@ -849,8 +849,16 @@ static int qemu_gluster_open(BlockDriverState *bs, > QDict *options, > qemu_gluster_parse_flags(bdrv_flags, &open_flags); > > s->fd = glfs_open(s->glfs, gconf->path, open_flags); > - if (!s->fd) { > - ret = -errno; > + ret = s->fd ? 0 : -errno; > + > + if (ret == -EACCES || ret == -EROFS) { > + /* Try to degrade to read-only, but if it doesn't work, still use the > + * normal error message. */ > + if (bdrv_apply_auto_read_only(bs, NULL, NULL) == 0) { > + open_flags = (open_flags & ~O_RDWR) | O_RDONLY; > + s->fd = glfs_open(s->glfs, gconf->path, open_flags); > + ret = s->fd ? 0 : -errno; > + } > } > > s->supports_seek_data = qemu_gluster_test_seek(s->fd); > --
Looks good to me, thanks. Reviewed-by: Niels de Vos <nde...@redhat.com>