Commit 8cdf433e authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe

cdrom: track if a cdrom_device_info was opened for data

Set a flag when a cdrom_device_info is opened for writing, instead of
trying to figure out this at release time.  This will allow to eventually
remove the mode argument to the ->release block_device_operation as
nothing but the CDROM drivers uses that argument.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarPhillip Potter <phil@philpotter.co.uk>
Acked-by: default avatarChristian Brauner <brauner@kernel.org>
Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
Link: https://lore.kernel.org/r/20230608110258.189493-6-hch@lst.deSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent a4cec8bc
...@@ -1172,6 +1172,7 @@ int cdrom_open(struct cdrom_device_info *cdi, fmode_t mode) ...@@ -1172,6 +1172,7 @@ int cdrom_open(struct cdrom_device_info *cdi, fmode_t mode)
ret = 0; ret = 0;
cdi->media_written = 0; cdi->media_written = 0;
} }
cdi->opened_for_data = true;
} }
if (ret) if (ret)
...@@ -1252,7 +1253,6 @@ static int check_for_audio_disc(struct cdrom_device_info *cdi, ...@@ -1252,7 +1253,6 @@ static int check_for_audio_disc(struct cdrom_device_info *cdi,
void cdrom_release(struct cdrom_device_info *cdi, fmode_t mode) void cdrom_release(struct cdrom_device_info *cdi, fmode_t mode)
{ {
const struct cdrom_device_ops *cdo = cdi->ops; const struct cdrom_device_ops *cdo = cdi->ops;
int opened_for_data;
cd_dbg(CD_CLOSE, "entering cdrom_release\n"); cd_dbg(CD_CLOSE, "entering cdrom_release\n");
...@@ -1270,14 +1270,12 @@ void cdrom_release(struct cdrom_device_info *cdi, fmode_t mode) ...@@ -1270,14 +1270,12 @@ void cdrom_release(struct cdrom_device_info *cdi, fmode_t mode)
} }
} }
opened_for_data = !(cdi->options & CDO_USE_FFLAGS) ||
!(mode & FMODE_NDELAY);
cdo->release(cdi); cdo->release(cdi);
if (cdi->use_count == 0) { /* last process that closes dev*/
if (opened_for_data && if (cdi->use_count == 0 && cdi->opened_for_data) {
cdi->options & CDO_AUTO_EJECT && CDROM_CAN(CDC_OPEN_TRAY)) if (cdi->options & CDO_AUTO_EJECT && CDROM_CAN(CDC_OPEN_TRAY))
cdo->tray_move(cdi, 1); cdo->tray_move(cdi, 1);
cdi->opened_for_data = false;
} }
} }
EXPORT_SYMBOL(cdrom_release); EXPORT_SYMBOL(cdrom_release);
......
...@@ -63,6 +63,7 @@ struct cdrom_device_info { ...@@ -63,6 +63,7 @@ struct cdrom_device_info {
unsigned short mmc3_profile; /* current MMC3 profile */ unsigned short mmc3_profile; /* current MMC3 profile */
int (*exit)(struct cdrom_device_info *); int (*exit)(struct cdrom_device_info *);
int mrw_mode_page; int mrw_mode_page;
bool opened_for_data;
__s64 last_media_change_ms; __s64 last_media_change_ms;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment