Re: [PATCH] libmount: if ENOMEDIUM and tray is open, close tray and retry

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Aug 01, 2017 at 02:16:15PM +0200, Karel Zak wrote:
> On Fri, Jul 21, 2017 at 08:44:03PM +0200, Stanislav Brabec wrote:
> > @@ -1399,6 +1405,7 @@ int mnt_context_get_mount_excode(
> >  	/*
> >  	 * mount(2) errors
> >  	 */
> > +mount_retry:
> >  	syserr = mnt_context_get_syscall_errno(cxt);
> >  
> >  
> > @@ -1563,6 +1570,19 @@ int mnt_context_get_mount_excode(
> >  		break;
> >  
> >  	case ENOMEDIUM:
> > +		cdrom = open(mnt_context_get_source(cxt), O_RDONLY | O_NONBLOCK);
> > +		if (cdrom != -1) {
> > +			if (retries < CRDOM_TRAYOPEN_RETRIES &&
> > +			    (ioctl(cdrom, CDROM_GET_CAPABILITY, NULL) & CDC_CLOSE_TRAY) &&
> > +			    ioctl(cdrom, CDROM_DRIVE_STATUS, NULL) == CDS_TRAY_OPEN) {
> > +				ioctl(cdrom, CDROMCLOSETRAY);
> > +				close(cdrom);
> > +				sleep(3);
> > +				++retries;
> > +				goto mount_retry;
> > +			} else
> > +				close(cdrom);
> > +		}
> 
> This cannot work.

Stanislav, do you want to update the patch before the next release?

    Karel

> 
> It seem you have tested the tray-close only, but I guess your goal is
> also *mount* the device. The "goto mount_retry" does not call any
> mount(2) stuff :-)
> 
> The function mnt_context_get_mount_excode() is wrong place. This
> optional function is there to generate error message and exit code.
> Nothing else.
> 
> The right place for your code is mnt_context_mount() where we already
> have the same logic ("try mount again") for read-only devices. You
> need something like:
> 
>  if (mnt_context_syscall_called(cxt) &&
>      mnt_context_get_syscall_errno(cxt) == ENOMEDIUM) {
> 
>     ... your open() and ioctls ...
> 
>     goto again;
>  }
> 
> 
> Use findmnt(8) to be sure that CDROM is really mounted.
> 
>     Karel
> 
> -- 
>  Karel Zak  <kzak@xxxxxxxxxx>
>  http://karelzak.blogspot.com

-- 
 Karel Zak  <kzak@xxxxxxxxxx>
 http://karelzak.blogspot.com
--
To unsubscribe from this list: send the line "unsubscribe util-linux" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux