From: Christoph Hellwig <hch@lst.de>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 2/4] raw-posix: add a raw_open_common helper
Date: Mon, 25 May 2009 09:59:22 +0200 [thread overview]
Message-ID: <20090525075922.GB2936@lst.de> (raw)
raw_open and hdev_open contain the same basic logic. Add a new
raw_open_common helper containing the guts of the open routine
and call it from raw_open and hdev_open.
We use the new open_flags field in BDRVRawState to allow passing
additional open flags to raw_open_common from both.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Index: qemu/block/raw-posix.c
===================================================================
--- qemu.orig/block/raw-posix.c 2009-05-25 09:20:13.949939473 +0200
+++ qemu/block/raw-posix.c 2009-05-25 09:21:56.307963685 +0200
@@ -124,7 +124,8 @@ static int cd_open(BlockDriverState *bs)
static int raw_is_inserted(BlockDriverState *bs);
-static int raw_open(BlockDriverState *bs, const char *filename, int flags)
+static int raw_open_common(BlockDriverState *bs, const char *filename,
+ int flags)
{
BDRVRawState *s = bs->opaque;
int fd, ret;
@@ -140,8 +141,6 @@ static int raw_open(BlockDriverState *bs
s->open_flags |= O_RDONLY;
bs->read_only = 1;
}
- if (flags & BDRV_O_CREAT)
- s->open_flags |= O_CREAT | O_TRUNC;
/* Use O_DSYNC for write-through caching, no flags for write-back caching,
* and O_DIRECT for no caching. */
@@ -150,8 +149,7 @@ static int raw_open(BlockDriverState *bs
else if (!(flags & BDRV_O_CACHE_WB))
s->open_flags |= O_DSYNC;
- s->type = FTYPE_FILE;
-
+ s->fd = -1;
fd = open(filename, s->open_flags, 0644);
if (fd < 0) {
ret = -errno;
@@ -172,6 +170,17 @@ static int raw_open(BlockDriverState *bs
return 0;
}
+static int raw_open(BlockDriverState *bs, const char *filename, int flags)
+{
+ BDRVRawState *s = bs->opaque;
+
+ s->type = FTYPE_FILE;
+ if (flags & BDRV_O_CREAT)
+ s->open_flags |= O_CREAT | O_TRUNC;
+
+ return raw_open_common(bs, filename, flags);
+}
+
/* XXX: use host sector size if necessary with:
#ifdef DIOCGSECTORSIZE
{
@@ -942,9 +951,7 @@ kern_return_t GetBSDPath( io_iterator_t
static int hdev_open(BlockDriverState *bs, const char *filename, int flags)
{
BDRVRawState *s = bs->opaque;
- int fd, ret;
-
- posix_aio_init();
+ int ret;
#ifdef CONFIG_COCOA
if (strstart(filename, "/dev/cdrom", NULL)) {
@@ -972,19 +979,6 @@ static int hdev_open(BlockDriverState *b
IOObjectRelease( mediaIterator );
}
#endif
- s->open_flags |= O_BINARY;
- if ((flags & BDRV_O_ACCESS) == O_RDWR) {
- s->open_flags |= O_RDWR;
- } else {
- s->open_flags |= O_RDONLY;
- bs->read_only = 1;
- }
- /* Use O_DSYNC for write-through caching, no flags for write-back caching,
- * and O_DIRECT for no caching. */
- if ((flags & BDRV_O_NOCACHE))
- s->open_flags |= O_DIRECT;
- else if (!(flags & BDRV_O_CACHE_WB))
- s->open_flags |= O_DSYNC;
s->type = FTYPE_FILE;
#if defined(__linux__)
@@ -1008,15 +1002,11 @@ static int hdev_open(BlockDriverState *b
s->type = FTYPE_CD;
}
#endif
- s->fd = -1;
- fd = open(filename, s->open_flags, 0644);
- if (fd < 0) {
- ret = -errno;
- if (ret == -EROFS)
- ret = -EACCES;
+
+ ret = raw_open_common(bs, filename, flags);
+ if (ret)
return ret;
- }
- s->fd = fd;
+
#if defined(__FreeBSD__)
/* make sure the door isnt locked at this time */
if (s->type == FTYPE_CD)
next reply other threads:[~2009-05-25 7:59 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-25 7:59 Christoph Hellwig [this message]
2009-06-09 19:54 ` [Qemu-devel] [PATCH 2/4] raw-posix: add a raw_open_common helper Glauber Costa
2009-06-11 16:00 ` Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090525075922.GB2936@lst.de \
--to=hch@lst.de \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.