Lines Matching refs:curlun
288 struct fsg_lun *curlun; member
621 struct fsg_lun *curlun = common->curlun; in do_read() local
645 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; in do_read()
649 if (lba >= curlun->num_sectors) { in do_read()
650 curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE; in do_read()
653 file_offset = ((loff_t) lba) << curlun->blkbits; in do_read()
669 curlun->file_length - file_offset); in do_read()
682 curlun->sense_data = in do_read()
684 curlun->sense_data_info = in do_read()
685 file_offset >> curlun->blkbits; in do_read()
686 curlun->info_valid = 1; in do_read()
694 nread = kernel_read(curlun->filp, bh->buf, amount, in do_read()
696 VLDBG(curlun, "file read %u @ %llu -> %d\n", amount, in do_read()
702 LDBG(curlun, "error in file read: %d\n", (int)nread); in do_read()
705 LDBG(curlun, "partial file read: %d/%u\n", in do_read()
707 nread = round_down(nread, curlun->blksize); in do_read()
723 curlun->sense_data = SS_UNRECOVERED_READ_ERROR; in do_read()
724 curlun->sense_data_info = in do_read()
725 file_offset >> curlun->blkbits; in do_read()
726 curlun->info_valid = 1; in do_read()
749 struct fsg_lun *curlun = common->curlun; in do_write() local
759 if (curlun->ro) { in do_write()
760 curlun->sense_data = SS_WRITE_PROTECTED; in do_write()
763 spin_lock(&curlun->filp->f_lock); in do_write()
764 curlun->filp->f_flags &= ~O_SYNC; /* Default is not to wait */ in do_write()
765 spin_unlock(&curlun->filp->f_lock); in do_write()
783 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; in do_write()
786 if (!curlun->nofua && (common->cmnd[1] & 0x08)) { /* FUA */ in do_write()
787 spin_lock(&curlun->filp->f_lock); in do_write()
788 curlun->filp->f_flags |= O_SYNC; in do_write()
789 spin_unlock(&curlun->filp->f_lock); in do_write()
792 if (lba >= curlun->num_sectors) { in do_write()
793 curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE; in do_write()
799 file_offset = usb_offset = ((loff_t) lba) << curlun->blkbits; in do_write()
817 if (usb_offset >= curlun->file_length) { in do_write()
819 curlun->sense_data = in do_write()
821 curlun->sense_data_info = in do_write()
822 usb_offset >> curlun->blkbits; in do_write()
823 curlun->info_valid = 1; in do_write()
862 curlun->sense_data = SS_COMMUNICATION_FAILURE; in do_write()
863 curlun->sense_data_info = in do_write()
864 file_offset >> curlun->blkbits; in do_write()
865 curlun->info_valid = 1; in do_write()
870 if (curlun->file_length - file_offset < amount) { in do_write()
871 LERROR(curlun, "write %u @ %llu beyond end %llu\n", in do_write()
873 (unsigned long long)curlun->file_length); in do_write()
874 amount = curlun->file_length - file_offset; in do_write()
884 amount = round_down(amount, curlun->blksize); in do_write()
890 nwritten = kernel_write(curlun->filp, bh->buf, amount, in do_write()
892 VLDBG(curlun, "file write %u @ %llu -> %d\n", amount, in do_write()
898 LDBG(curlun, "error in file write: %d\n", in do_write()
902 LDBG(curlun, "partial file write: %d/%u\n", in do_write()
904 nwritten = round_down(nwritten, curlun->blksize); in do_write()
912 curlun->sense_data = SS_WRITE_ERROR; in do_write()
913 curlun->sense_data_info = in do_write()
914 file_offset >> curlun->blkbits; in do_write()
915 curlun->info_valid = 1; in do_write()
935 struct fsg_lun *curlun = common->curlun; in do_synchronize_cache() local
940 rc = fsg_lun_fsync_sub(curlun); in do_synchronize_cache()
942 curlun->sense_data = SS_WRITE_ERROR; in do_synchronize_cache()
949 static void invalidate_sub(struct fsg_lun *curlun) in invalidate_sub() argument
951 struct file *filp = curlun->filp; in invalidate_sub()
956 VLDBG(curlun, "invalidate_mapping_pages -> %ld\n", rc); in invalidate_sub()
961 struct fsg_lun *curlun = common->curlun; in do_verify() local
975 if (lba >= curlun->num_sectors) { in do_verify()
976 curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE; in do_verify()
985 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; in do_verify()
994 amount_left = verification_length << curlun->blkbits; in do_verify()
995 file_offset = ((loff_t) lba) << curlun->blkbits; in do_verify()
998 fsg_lun_fsync_sub(curlun); in do_verify()
1002 invalidate_sub(curlun); in do_verify()
1016 curlun->file_length - file_offset); in do_verify()
1018 curlun->sense_data = in do_verify()
1020 curlun->sense_data_info = in do_verify()
1021 file_offset >> curlun->blkbits; in do_verify()
1022 curlun->info_valid = 1; in do_verify()
1028 nread = kernel_read(curlun->filp, bh->buf, amount, in do_verify()
1030 VLDBG(curlun, "file read %u @ %llu -> %d\n", amount, in do_verify()
1037 LDBG(curlun, "error in file verify: %d\n", (int)nread); in do_verify()
1040 LDBG(curlun, "partial file verify: %d/%u\n", in do_verify()
1042 nread = round_down(nread, curlun->blksize); in do_verify()
1045 curlun->sense_data = SS_UNRECOVERED_READ_ERROR; in do_verify()
1046 curlun->sense_data_info = in do_verify()
1047 file_offset >> curlun->blkbits; in do_verify()
1048 curlun->info_valid = 1; in do_verify()
1062 struct fsg_lun *curlun = common->curlun; in do_inquiry() local
1065 if (!curlun) { /* Unsupported LUNs are okay */ in do_inquiry()
1073 buf[0] = curlun->cdrom ? TYPE_ROM : TYPE_DISK; in do_inquiry()
1074 buf[1] = curlun->removable ? 0x80 : 0; in do_inquiry()
1081 if (curlun->inquiry_string[0]) in do_inquiry()
1082 memcpy(buf + 8, curlun->inquiry_string, in do_inquiry()
1083 sizeof(curlun->inquiry_string)); in do_inquiry()
1092 struct fsg_lun *curlun = common->curlun; in do_request_sense() local
1113 if (curlun && curlun->unit_attention_data != SS_NO_SENSE) { in do_request_sense()
1114 curlun->sense_data = curlun->unit_attention_data; in do_request_sense()
1115 curlun->unit_attention_data = SS_NO_SENSE; in do_request_sense()
1119 if (!curlun) { /* Unsupported LUNs are okay */ in do_request_sense()
1125 sd = curlun->sense_data; in do_request_sense()
1126 sdinfo = curlun->sense_data_info; in do_request_sense()
1127 valid = curlun->info_valid << 7; in do_request_sense()
1128 curlun->sense_data = SS_NO_SENSE; in do_request_sense()
1129 curlun->sense_data_info = 0; in do_request_sense()
1130 curlun->info_valid = 0; in do_request_sense()
1145 struct fsg_lun *curlun = common->curlun; in do_read_capacity() local
1152 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; in do_read_capacity()
1156 put_unaligned_be32(curlun->num_sectors - 1, &buf[0]); in do_read_capacity()
1158 put_unaligned_be32(curlun->blksize, &buf[4]);/* Block length */ in do_read_capacity()
1164 struct fsg_lun *curlun = common->curlun; in do_read_header() local
1170 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; in do_read_header()
1173 if (lba >= curlun->num_sectors) { in do_read_header()
1174 curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE; in do_read_header()
1186 struct fsg_lun *curlun = common->curlun; in do_read_toc() local
1193 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; in do_read_toc()
1207 store_cdrom_address(&buf[16], msf, curlun->num_sectors); in do_read_toc()
1213 struct fsg_lun *curlun = common->curlun; in do_mode_sense() local
1223 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; in do_mode_sense()
1229 curlun->sense_data = SS_SAVING_PARAMETERS_NOT_SUPPORTED; in do_mode_sense()
1243 buf[2] = (curlun->ro ? 0x80 : 0x00); /* WP, DPOFUA */ in do_mode_sense()
1247 buf[3] = (curlun->ro ? 0x80 : 0x00); /* WP, DPOFUA */ in do_mode_sense()
1285 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; in do_mode_sense()
1299 struct fsg_lun *curlun = common->curlun; in do_start_stop() local
1302 if (!curlun) { in do_start_stop()
1304 } else if (!curlun->removable) { in do_start_stop()
1305 curlun->sense_data = SS_INVALID_COMMAND; in do_start_stop()
1309 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; in do_start_stop()
1321 if (!fsg_lun_is_open(curlun)) { in do_start_stop()
1322 curlun->sense_data = SS_MEDIUM_NOT_PRESENT; in do_start_stop()
1329 if (curlun->prevent_medium_removal) { in do_start_stop()
1330 LDBG(curlun, "unload attempt prevented\n"); in do_start_stop()
1331 curlun->sense_data = SS_MEDIUM_REMOVAL_PREVENTED; in do_start_stop()
1340 fsg_lun_close(curlun); in do_start_stop()
1349 struct fsg_lun *curlun = common->curlun; in do_prevent_allow() local
1352 if (!common->curlun) { in do_prevent_allow()
1354 } else if (!common->curlun->removable) { in do_prevent_allow()
1355 common->curlun->sense_data = SS_INVALID_COMMAND; in do_prevent_allow()
1361 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; in do_prevent_allow()
1365 if (curlun->prevent_medium_removal && !prevent) in do_prevent_allow()
1366 fsg_lun_fsync_sub(curlun); in do_prevent_allow()
1367 curlun->prevent_medium_removal = prevent; in do_prevent_allow()
1374 struct fsg_lun *curlun = common->curlun; in do_read_format_capacities() local
1381 put_unaligned_be32(curlun->num_sectors, &buf[0]); in do_read_format_capacities()
1383 put_unaligned_be32(curlun->blksize, &buf[4]);/* Block length */ in do_read_format_capacities()
1390 struct fsg_lun *curlun = common->curlun; in do_mode_select() local
1393 if (curlun) in do_mode_select()
1394 curlun->sense_data = SS_INVALID_COMMAND; in do_mode_select()
1599 struct fsg_lun *curlun = common->curlun; in send_status() local
1612 if (curlun) { in send_status()
1613 sd = curlun->sense_data; in send_status()
1614 sdinfo = curlun->sense_data_info; in send_status()
1665 struct fsg_lun *curlun; in check_command() local
1732 curlun = common->curlun; in check_command()
1733 if (curlun) { in check_command()
1735 curlun->sense_data = SS_NO_SENSE; in check_command()
1736 curlun->sense_data_info = 0; in check_command()
1737 curlun->info_valid = 0; in check_command()
1757 if (curlun && curlun->unit_attention_data != SS_NO_SENSE && in check_command()
1760 curlun->sense_data = curlun->unit_attention_data; in check_command()
1761 curlun->unit_attention_data = SS_NO_SENSE; in check_command()
1769 if (curlun) in check_command()
1770 curlun->sense_data = SS_INVALID_FIELD_IN_CDB; in check_command()
1777 if (curlun && !fsg_lun_is_open(curlun) && needs_medium) { in check_command()
1778 curlun->sense_data = SS_MEDIUM_NOT_PRESENT; in check_command()
1790 if (common->curlun) in check_command_size_in_blocks()
1791 common->data_size_from_cmnd <<= common->curlun->blkbits; in check_command_size_in_blocks()
1918 if (!common->curlun || !common->curlun->cdrom) in do_scsi_command()
1930 if (!common->curlun || !common->curlun->cdrom) in do_scsi_command()
2050 common->curlun->sense_data = SS_INVALID_COMMAND; in do_scsi_command()
2141 common->curlun = common->luns[common->lun]; in received_cbw()
2143 common->curlun = NULL; in received_cbw()
2315 struct fsg_lun *curlun; in handle_exception() local
2377 curlun = common->luns[i]; in handle_exception()
2378 if (!curlun) in handle_exception()
2380 curlun->prevent_medium_removal = 0; in handle_exception()
2381 curlun->sense_data = SS_NO_SENSE; in handle_exception()
2382 curlun->unit_attention_data = SS_NO_SENSE; in handle_exception()
2383 curlun->sense_data_info = 0; in handle_exception()
2384 curlun->info_valid = 0; in handle_exception()
2491 struct fsg_lun *curlun = common->luns[i]; in fsg_main_thread() local
2493 if (curlun && fsg_lun_is_open(curlun)) in fsg_main_thread()
2494 fsg_lun_close(curlun); in fsg_main_thread()
2507 struct fsg_lun *curlun = fsg_lun_from_dev(dev); in ro_show() local
2509 return fsg_show_ro(curlun, buf); in ro_show()
2515 struct fsg_lun *curlun = fsg_lun_from_dev(dev); in nofua_show() local
2517 return fsg_show_nofua(curlun, buf); in nofua_show()
2523 struct fsg_lun *curlun = fsg_lun_from_dev(dev); in file_show() local
2526 return fsg_show_file(curlun, filesem, buf); in file_show()
2532 struct fsg_lun *curlun = fsg_lun_from_dev(dev); in ro_store() local
2535 return fsg_store_ro(curlun, filesem, buf, count); in ro_store()
2541 struct fsg_lun *curlun = fsg_lun_from_dev(dev); in nofua_store() local
2543 return fsg_store_nofua(curlun, buf, count); in nofua_store()
2549 struct fsg_lun *curlun = fsg_lun_from_dev(dev); in file_store() local
2552 return fsg_store_file(curlun, filesem, buf, count); in file_store()