diff mbox

raw-posix.c: Make GetBSDPath() handle caching options

Message ID CB31C849-5B06-4878-8228-5DFD82849F89@gmail.com
State New
Headers show

Commit Message

Programmingkid July 27, 2015, 4:28 p.m. UTC
Add support for caching options that can be specified from
the command line. 

Signed-off-by: John Arbuckle <programmingkidx@gmail.com>

---
 block/raw-posix.c |   15 +++++++++------
 1 files changed, 9 insertions(+), 6 deletions(-)

Comments

Stefan Hajnoczi July 28, 2015, 10:18 a.m. UTC | #1
On Mon, Jul 27, 2015 at 12:28:03PM -0400, Programmingkid wrote:
> Add support for caching options that can be specified from
> the command line. 

Please squash this into the commit message when merging:

The CD-ROM raw char device bypasses the host page cache and therefore
has alignment requirements.  Alignment probing is necessary so only use
the raw char device if BDRV_O_NOCACHE is set.

This patch fixes -cdrom /dev/cdrom on Mac OS X hosts, where bdrv_read()
used to fail due to misaligned requests during image format probing.

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Programmingkid July 28, 2015, 3:26 p.m. UTC | #2
On Jul 28, 2015, at 6:18 AM, Stefan Hajnoczi wrote:

> On Mon, Jul 27, 2015 at 12:28:03PM -0400, Programmingkid wrote:
>> Add support for caching options that can be specified from
>> the command line. 
> 
> Please squash this into the commit message when merging:

Is this message meant for Kevin Wolf?

> 
> The CD-ROM raw char device bypasses the host page cache and therefore
> has alignment requirements.  Alignment probing is necessary so only use
> the raw char device if BDRV_O_NOCACHE is set.
> 
> This patch fixes -cdrom /dev/cdrom on Mac OS X hosts, where bdrv_read()
> used to fail due to misaligned requests during image format probing.
> 
> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Stefan Hajnoczi July 28, 2015, 3:43 p.m. UTC | #3
On Tue, Jul 28, 2015 at 4:26 PM, Programmingkid
<programmingkidx@gmail.com> wrote:
>
> On Jul 28, 2015, at 6:18 AM, Stefan Hajnoczi wrote:
>
>> On Mon, Jul 27, 2015 at 12:28:03PM -0400, Programmingkid wrote:
>>> Add support for caching options that can be specified from
>>> the command line.
>>
>> Please squash this into the commit message when merging:
>
> Is this message meant for Kevin Wolf?

Yes.  He maintains block/raw-posix.c and will see the message when
reviewing this patch series.

Stefan
diff mbox

Patch

diff --git a/block/raw-posix.c b/block/raw-posix.c
index cbe6574..67d1d48 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -1973,8 +1973,8 @@  BlockDriver bdrv_file = {
 
 #if defined(__APPLE__) && defined(__MACH__)
 static kern_return_t FindEjectableCDMedia( io_iterator_t *mediaIterator );
-static kern_return_t GetBSDPath( io_iterator_t mediaIterator, char *bsdPath, CFIndex maxPathSize );
-
+static kern_return_t GetBSDPath(io_iterator_t mediaIterator, char *bsdPath,
+                                CFIndex maxPathSize, int flags);
 kern_return_t FindEjectableCDMedia( io_iterator_t *mediaIterator )
 {
     kern_return_t       kernResult;
@@ -2001,7 +2001,8 @@  kern_return_t FindEjectableCDMedia( io_iterator_t *mediaIterator )
     return kernResult;
 }
 
-kern_return_t GetBSDPath( io_iterator_t mediaIterator, char *bsdPath, CFIndex maxPathSize )
+kern_return_t GetBSDPath(io_iterator_t mediaIterator, char *bsdPath,
+                         CFIndex maxPathSize, int flags)
 {
     io_object_t     nextMedia;
     kern_return_t   kernResult = KERN_FAILURE;
@@ -2014,7 +2015,9 @@  kern_return_t GetBSDPath( io_iterator_t mediaIterator, char *bsdPath, CFIndex ma
         if ( bsdPathAsCFString ) {
             size_t devPathLength;
             strcpy( bsdPath, _PATH_DEV );
-            strcat( bsdPath, "r" );
+            if (flags & BDRV_O_NOCACHE) {
+                strcat(bsdPath, "r");
+            }
             devPathLength = strlen( bsdPath );
             if ( CFStringGetCString( bsdPathAsCFString, bsdPath + devPathLength, maxPathSize - devPathLength, kCFStringEncodingASCII ) ) {
                 kernResult = KERN_SUCCESS;
@@ -2126,8 +2129,8 @@  static int hdev_open(BlockDriverState *bs, QDict *options, int flags,
         int fd;
 
         kernResult = FindEjectableCDMedia( &mediaIterator );
-        kernResult = GetBSDPath( mediaIterator, bsdPath, sizeof( bsdPath ) );
-
+        kernResult = GetBSDPath(mediaIterator, bsdPath, sizeof(bsdPath),
+                                                                        flags);
         if ( bsdPath[ 0 ] != '\0' ) {
             strcat(bsdPath,"s0");
             /* some CDs don't have a partition 0 */