Message ID | 20181012115532.12645-8-kwolf@redhat.com |
---|---|
State | New |
Headers | show |
Series | block: Add auto-read-only option | expand |
On 10/12/18 6:55 AM, 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 <kwolf@redhat.com> > --- > block/gluster.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/block/gluster.c b/block/gluster.c > index 4fd55a9cc5..68d20c8830 100644 > --- a/block/gluster.c > +++ b/block/gluster.c > @@ -849,6 +849,15 @@ 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 && errno == EACCES) { EROFS is not possible as it was for posix file? > + /* Try to degrade to read-only, but if it doesn't work, still use the > + * normal error message. */ > + ret = bdrv_apply_auto_read_only(bs, NULL, NULL); No guarantees on what errno is on failure... > + if (ret == 0) { > + open_flags = (open_flags & ~O_RDWR) | O_RDONLY; > + s->fd = glfs_open(s->glfs, gconf->path, open_flags); > + } > + } > if (!s->fd) { > ret = -errno; ...but you are relying on it here. (Same story as in the posix driver)
On Fri, Oct 12, 2018 at 12:31:21PM -0500, Eric Blake wrote: > On 10/12/18 6:55 AM, 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 <kwolf@redhat.com> > > --- > > block/gluster.c | 9 +++++++++ > > 1 file changed, 9 insertions(+) > > > > diff --git a/block/gluster.c b/block/gluster.c > > index 4fd55a9cc5..68d20c8830 100644 > > --- a/block/gluster.c > > +++ b/block/gluster.c > > @@ -849,6 +849,15 @@ 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 && errno == EACCES) { > > EROFS is not possible as it was for posix file? EROFS can happen, depending on the configuration of the Gluster volume. In that case, opening read-only should work fine. Niels
diff --git a/block/gluster.c b/block/gluster.c index 4fd55a9cc5..68d20c8830 100644 --- a/block/gluster.c +++ b/block/gluster.c @@ -849,6 +849,15 @@ 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 && errno == EACCES) { + /* Try to degrade to read-only, but if it doesn't work, still use the + * normal error message. */ + ret = bdrv_apply_auto_read_only(bs, NULL, NULL); + if (ret == 0) { + open_flags = (open_flags & ~O_RDWR) | O_RDONLY; + s->fd = glfs_open(s->glfs, gconf->path, open_flags); + } + } if (!s->fd) { ret = -errno; }
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 <kwolf@redhat.com> --- block/gluster.c | 9 +++++++++ 1 file changed, 9 insertions(+)