USB: g_file_storage: per-LUN ro, removable and cdrom flags handling changed
removable and cdrom flag has been added to the fsg_lun structure removing any references to mod_data object from storage_common.c. As of read-only flag, previously it was set if a read-only backing file was specified (which is good) and remained set even after the file has been closed (which may be considered an issue). Currently, the initial read-only flag is preserved so if it was unset each time file is opened code will try to open it read-write even if previous file was opened read-only. Signed-off-by: Michal Nazarewicz <m.nazarewicz@samsung.com> Cc: David Brownell <dbrownell@users.sourceforge.net> Cc: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Šī revīzija ir iekļauta:

revīziju iesūtīja
Greg Kroah-Hartman

vecāks
d6181702f5
revīzija
e909ef5def
@@ -225,7 +225,10 @@ struct fsg_lun {
|
||||
loff_t file_length;
|
||||
loff_t num_sectors;
|
||||
|
||||
unsigned int initially_ro : 1;
|
||||
unsigned int ro : 1;
|
||||
unsigned int removable : 1;
|
||||
unsigned int cdrom : 1;
|
||||
unsigned int prevent_medium_removal : 1;
|
||||
unsigned int registered : 1;
|
||||
unsigned int info_valid : 1;
|
||||
@@ -478,7 +481,7 @@ static int fsg_lun_open(struct fsg_lun *curlun, const char *filename)
|
||||
loff_t min_sectors;
|
||||
|
||||
/* R/W if we can, R/O if we must */
|
||||
ro = curlun->ro;
|
||||
ro = curlun->initially_ro;
|
||||
if (!ro) {
|
||||
filp = filp_open(filename, O_RDWR | O_LARGEFILE, 0);
|
||||
if (-EROFS == PTR_ERR(filp))
|
||||
@@ -521,7 +524,7 @@ static int fsg_lun_open(struct fsg_lun *curlun, const char *filename)
|
||||
}
|
||||
num_sectors = size >> 9; // File size in 512-byte blocks
|
||||
min_sectors = 1;
|
||||
if (mod_data.cdrom) {
|
||||
if (curlun->cdrom) {
|
||||
num_sectors &= ~3; // Reduce to a multiple of 2048
|
||||
min_sectors = 300*4; // Smallest track is 300 frames
|
||||
if (num_sectors >= 256*60*75*4) {
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user