From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NUUCA-0008DF-6D for qemu-devel@nongnu.org; Mon, 11 Jan 2010 19:01:14 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NUUC5-0008B5-HN for qemu-devel@nongnu.org; Mon, 11 Jan 2010 19:01:13 -0500 Received: from [199.232.76.173] (port=40378 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NUUC5-0008B2-Cn for qemu-devel@nongnu.org; Mon, 11 Jan 2010 19:01:09 -0500 Received: from mx1.redhat.com ([209.132.183.28]:34648) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NUUC4-0000MO-IY for qemu-devel@nongnu.org; Mon, 11 Jan 2010 19:01:08 -0500 Message-ID: <4B4BBBC1.1040903@redhat.com> Date: Mon, 11 Jan 2010 19:01:05 -0500 From: Cole Robinson MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] raw-posix: Detect CDROM via ioctl References: <1263234619-14522-1-git-send-email-crobinso@redhat.com> <20100111231357.GF8096@verge.net.au> In-Reply-To: <20100111231357.GF8096@verge.net.au> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Simon Horman Cc: qemu-devel@nongnu.org On 01/11/2010 06:13 PM, Simon Horman wrote: > On Mon, Jan 11, 2010 at 01:30:18PM -0500, Cole Robinson wrote: >> Current CDROM detection is hardcoded based on source file name. >> Make this smarter by attempting a CDROM specific ioctl. >> >> This makes '-cdrom /dev/sr0' succeed with no media present. >> >> Signed-off-by: Cole Robinson >> --- >> block/raw-posix.c | 18 +++++++++++++++++- >> 1 files changed, 17 insertions(+), 1 deletions(-) >> >> diff --git a/block/raw-posix.c b/block/raw-posix.c >> index 5a6a22b..3ec58d0 100644 >> --- a/block/raw-posix.c >> +++ b/block/raw-posix.c >> @@ -1140,9 +1140,25 @@ static int cdrom_open(BlockDriverState *bs, const char *filename, int flags) >> >> static int cdrom_probe_device(const char *filename) >> { >> + int fd, ret; >> + >> if (strstart(filename, "/dev/cd", NULL)) >> return 100; >> - return 0; >> + >> + fd = open(filename, O_RDONLY | O_NONBLOCK); >> + if (fd < 0) { >> + return 0; >> + } >> + >> + /* Attempt to detect via a CDROM specific ioctl */ >> + if (ioctl(fd, CDROM_DRIVE_STATUS, CDSL_CURRENT) < 0 && errno == EINVAL) { >> + ret = 0; >> + } else { >> + ret = 100; >> + } >> + >> + close(fd); >> + return ret; >> } >> >> static int cdrom_is_inserted(BlockDriverState *bs) > > Does this render the remaining "/dev/cd" check unnecessary? > Likewise for the similar change that you posted for floppies. > Probably, but I figured I'd be conservative and keep the check in place to avoid possible regressions. If one of the regular devs/maintainers wants it removed I'll respin the patches. Thanks, Cole