• Home
  • Raw
  • Download

Lines Matching refs:pkt

525 	struct packet_data *pkt;  in pkt_alloc_packet_data()  local
527 pkt = kzalloc(sizeof(struct packet_data), GFP_KERNEL); in pkt_alloc_packet_data()
528 if (!pkt) in pkt_alloc_packet_data()
531 pkt->frames = frames; in pkt_alloc_packet_data()
532 pkt->w_bio = bio_kmalloc(GFP_KERNEL, frames); in pkt_alloc_packet_data()
533 if (!pkt->w_bio) in pkt_alloc_packet_data()
537 pkt->pages[i] = alloc_page(GFP_KERNEL|__GFP_ZERO); in pkt_alloc_packet_data()
538 if (!pkt->pages[i]) in pkt_alloc_packet_data()
542 spin_lock_init(&pkt->lock); in pkt_alloc_packet_data()
543 bio_list_init(&pkt->orig_bios); in pkt_alloc_packet_data()
550 pkt->r_bios[i] = bio; in pkt_alloc_packet_data()
553 return pkt; in pkt_alloc_packet_data()
557 struct bio *bio = pkt->r_bios[i]; in pkt_alloc_packet_data()
564 if (pkt->pages[i]) in pkt_alloc_packet_data()
565 __free_page(pkt->pages[i]); in pkt_alloc_packet_data()
566 bio_put(pkt->w_bio); in pkt_alloc_packet_data()
568 kfree(pkt); in pkt_alloc_packet_data()
576 static void pkt_free_packet_data(struct packet_data *pkt) in pkt_free_packet_data() argument
580 for (i = 0; i < pkt->frames; i++) { in pkt_free_packet_data()
581 struct bio *bio = pkt->r_bios[i]; in pkt_free_packet_data()
585 for (i = 0; i < pkt->frames / FRAMES_PER_PAGE; i++) in pkt_free_packet_data()
586 __free_page(pkt->pages[i]); in pkt_free_packet_data()
587 bio_put(pkt->w_bio); in pkt_free_packet_data()
588 kfree(pkt); in pkt_free_packet_data()
593 struct packet_data *pkt, *next; in pkt_shrink_pktlist() local
597 list_for_each_entry_safe(pkt, next, &pd->cdrw.pkt_free_list, list) { in pkt_shrink_pktlist()
598 pkt_free_packet_data(pkt); in pkt_shrink_pktlist()
605 struct packet_data *pkt; in pkt_grow_pktlist() local
610 pkt = pkt_alloc_packet_data(pd->settings.size >> 2); in pkt_grow_pktlist()
611 if (!pkt) { in pkt_grow_pktlist()
615 pkt->id = nr_packets; in pkt_grow_pktlist()
616 pkt->pd = pd; in pkt_grow_pktlist()
617 list_add(&pkt->list, &pd->cdrw.pkt_free_list); in pkt_grow_pktlist()
949 struct packet_data *pkt = bio->bi_private; in pkt_end_io_read() local
950 struct pktcdvd_device *pd = pkt->pd; in pkt_end_io_read()
954 bio, (unsigned long long)pkt->sector, in pkt_end_io_read()
958 atomic_inc(&pkt->io_errors); in pkt_end_io_read()
959 if (atomic_dec_and_test(&pkt->io_wait)) { in pkt_end_io_read()
960 atomic_inc(&pkt->run_sm); in pkt_end_io_read()
968 struct packet_data *pkt = bio->bi_private; in pkt_end_io_packet_write() local
969 struct pktcdvd_device *pd = pkt->pd; in pkt_end_io_packet_write()
972 pkt_dbg(2, pd, "id=%d, err=%d\n", pkt->id, bio->bi_status); in pkt_end_io_packet_write()
977 atomic_dec(&pkt->io_wait); in pkt_end_io_packet_write()
978 atomic_inc(&pkt->run_sm); in pkt_end_io_packet_write()
985 static void pkt_gather_data(struct pktcdvd_device *pd, struct packet_data *pkt) in pkt_gather_data() argument
992 BUG_ON(bio_list_empty(&pkt->orig_bios)); in pkt_gather_data()
994 atomic_set(&pkt->io_wait, 0); in pkt_gather_data()
995 atomic_set(&pkt->io_errors, 0); in pkt_gather_data()
1001 spin_lock(&pkt->lock); in pkt_gather_data()
1002 bio_list_for_each(bio, &pkt->orig_bios) { in pkt_gather_data()
1003 int first_frame = (bio->bi_iter.bi_sector - pkt->sector) / in pkt_gather_data()
1008 BUG_ON(first_frame + num_frames > pkt->frames); in pkt_gather_data()
1012 spin_unlock(&pkt->lock); in pkt_gather_data()
1014 if (pkt->cache_valid) { in pkt_gather_data()
1016 (unsigned long long)pkt->sector); in pkt_gather_data()
1023 for (f = 0; f < pkt->frames; f++) { in pkt_gather_data()
1029 bio = pkt->r_bios[f]; in pkt_gather_data()
1031 bio->bi_iter.bi_sector = pkt->sector + f * (CD_FRAMESIZE >> 9); in pkt_gather_data()
1034 bio->bi_private = pkt; in pkt_gather_data()
1039 f, pkt->pages[p], offset); in pkt_gather_data()
1040 if (!bio_add_page(bio, pkt->pages[p], CD_FRAMESIZE, offset)) in pkt_gather_data()
1043 atomic_inc(&pkt->io_wait); in pkt_gather_data()
1051 frames_read, (unsigned long long)pkt->sector); in pkt_gather_data()
1062 struct packet_data *pkt; in pkt_get_packet_data() local
1064 list_for_each_entry(pkt, &pd->cdrw.pkt_free_list, list) { in pkt_get_packet_data()
1065 if (pkt->sector == zone || pkt->list.next == &pd->cdrw.pkt_free_list) { in pkt_get_packet_data()
1066 list_del_init(&pkt->list); in pkt_get_packet_data()
1067 if (pkt->sector != zone) in pkt_get_packet_data()
1068 pkt->cache_valid = 0; in pkt_get_packet_data()
1069 return pkt; in pkt_get_packet_data()
1076 static void pkt_put_packet_data(struct pktcdvd_device *pd, struct packet_data *pkt) in pkt_put_packet_data() argument
1078 if (pkt->cache_valid) { in pkt_put_packet_data()
1079 list_add(&pkt->list, &pd->cdrw.pkt_free_list); in pkt_put_packet_data()
1081 list_add_tail(&pkt->list, &pd->cdrw.pkt_free_list); in pkt_put_packet_data()
1085 static inline void pkt_set_state(struct packet_data *pkt, enum packet_data_state state) in pkt_set_state() argument
1091 enum packet_data_state old_state = pkt->state; in pkt_set_state()
1093 pkt->id, (unsigned long long)pkt->sector, in pkt_set_state()
1096 pkt->state = state; in pkt_set_state()
1105 struct packet_data *pkt, *p; in pkt_handle_queue() local
1156 pkt = pkt_get_packet_data(pd, zone); in pkt_handle_queue()
1159 pkt->sector = zone; in pkt_handle_queue()
1160 BUG_ON(pkt->frames != pd->settings.size >> 2); in pkt_handle_queue()
1161 pkt->write_size = 0; in pkt_handle_queue()
1176 spin_lock(&pkt->lock); in pkt_handle_queue()
1177 bio_list_add(&pkt->orig_bios, bio); in pkt_handle_queue()
1178 pkt->write_size += bio->bi_iter.bi_size / CD_FRAMESIZE; in pkt_handle_queue()
1179 spin_unlock(&pkt->lock); in pkt_handle_queue()
1189 pkt->sleep_time = max(PACKET_WAIT_TIME, 1); in pkt_handle_queue()
1190 pkt_set_state(pkt, PACKET_WAITING_STATE); in pkt_handle_queue()
1191 atomic_set(&pkt->run_sm, 1); in pkt_handle_queue()
1194 list_add(&pkt->list, &pd->cdrw.pkt_active_list); in pkt_handle_queue()
1240 static void pkt_start_write(struct pktcdvd_device *pd, struct packet_data *pkt) in pkt_start_write() argument
1244 bio_reset(pkt->w_bio); in pkt_start_write()
1245 pkt->w_bio->bi_iter.bi_sector = pkt->sector; in pkt_start_write()
1246 bio_set_dev(pkt->w_bio, pd->bdev); in pkt_start_write()
1247 pkt->w_bio->bi_end_io = pkt_end_io_packet_write; in pkt_start_write()
1248 pkt->w_bio->bi_private = pkt; in pkt_start_write()
1251 for (f = 0; f < pkt->frames; f++) { in pkt_start_write()
1252 struct page *page = pkt->pages[(f * CD_FRAMESIZE) / PAGE_SIZE]; in pkt_start_write()
1255 if (!bio_add_page(pkt->w_bio, page, CD_FRAMESIZE, offset)) in pkt_start_write()
1258 pkt_dbg(2, pd, "vcnt=%d\n", pkt->w_bio->bi_vcnt); in pkt_start_write()
1263 spin_lock(&pkt->lock); in pkt_start_write()
1264 bio_list_copy_data(pkt->w_bio, pkt->orig_bios.head); in pkt_start_write()
1266 pkt_set_state(pkt, PACKET_WRITE_WAIT_STATE); in pkt_start_write()
1267 spin_unlock(&pkt->lock); in pkt_start_write()
1270 pkt->write_size, (unsigned long long)pkt->sector); in pkt_start_write()
1272 if (test_bit(PACKET_MERGE_SEGS, &pd->flags) || (pkt->write_size < pkt->frames)) in pkt_start_write()
1273 pkt->cache_valid = 1; in pkt_start_write()
1275 pkt->cache_valid = 0; in pkt_start_write()
1278 atomic_set(&pkt->io_wait, 1); in pkt_start_write()
1279 bio_set_op_attrs(pkt->w_bio, REQ_OP_WRITE, 0); in pkt_start_write()
1280 pkt_queue_bio(pd, pkt->w_bio); in pkt_start_write()
1283 static void pkt_finish_packet(struct packet_data *pkt, blk_status_t status) in pkt_finish_packet() argument
1288 pkt->cache_valid = 0; in pkt_finish_packet()
1291 while ((bio = bio_list_pop(&pkt->orig_bios))) { in pkt_finish_packet()
1297 static void pkt_run_state_machine(struct pktcdvd_device *pd, struct packet_data *pkt) in pkt_run_state_machine() argument
1299 pkt_dbg(2, pd, "pkt %d\n", pkt->id); in pkt_run_state_machine()
1302 switch (pkt->state) { in pkt_run_state_machine()
1304 if ((pkt->write_size < pkt->frames) && (pkt->sleep_time > 0)) in pkt_run_state_machine()
1307 pkt->sleep_time = 0; in pkt_run_state_machine()
1308 pkt_gather_data(pd, pkt); in pkt_run_state_machine()
1309 pkt_set_state(pkt, PACKET_READ_WAIT_STATE); in pkt_run_state_machine()
1313 if (atomic_read(&pkt->io_wait) > 0) in pkt_run_state_machine()
1316 if (atomic_read(&pkt->io_errors) > 0) { in pkt_run_state_machine()
1317 pkt_set_state(pkt, PACKET_RECOVERY_STATE); in pkt_run_state_machine()
1319 pkt_start_write(pd, pkt); in pkt_run_state_machine()
1324 if (atomic_read(&pkt->io_wait) > 0) in pkt_run_state_machine()
1327 if (!pkt->w_bio->bi_status) { in pkt_run_state_machine()
1328 pkt_set_state(pkt, PACKET_FINISHED_STATE); in pkt_run_state_machine()
1330 pkt_set_state(pkt, PACKET_RECOVERY_STATE); in pkt_run_state_machine()
1336 pkt_set_state(pkt, PACKET_FINISHED_STATE); in pkt_run_state_machine()
1340 pkt_finish_packet(pkt, pkt->w_bio->bi_status); in pkt_run_state_machine()
1352 struct packet_data *pkt, *next; in pkt_handle_packets() local
1357 list_for_each_entry(pkt, &pd->cdrw.pkt_active_list, list) { in pkt_handle_packets()
1358 if (atomic_read(&pkt->run_sm) > 0) { in pkt_handle_packets()
1359 atomic_set(&pkt->run_sm, 0); in pkt_handle_packets()
1360 pkt_run_state_machine(pd, pkt); in pkt_handle_packets()
1368 list_for_each_entry_safe(pkt, next, &pd->cdrw.pkt_active_list, list) { in pkt_handle_packets()
1369 if (pkt->state == PACKET_FINISHED_STATE) { in pkt_handle_packets()
1370 list_del(&pkt->list); in pkt_handle_packets()
1371 pkt_put_packet_data(pd, pkt); in pkt_handle_packets()
1372 pkt_set_state(pkt, PACKET_IDLE_STATE); in pkt_handle_packets()
1381 struct packet_data *pkt; in pkt_count_states() local
1388 list_for_each_entry(pkt, &pd->cdrw.pkt_active_list, list) { in pkt_count_states()
1389 states[pkt->state]++; in pkt_count_states()
1401 struct packet_data *pkt; in kcdrwd() local
1422 list_for_each_entry(pkt, &pd->cdrw.pkt_active_list, list) { in kcdrwd()
1423 if (atomic_read(&pkt->run_sm) > 0) in kcdrwd()
1441 list_for_each_entry(pkt, &pd->cdrw.pkt_active_list, list) { in kcdrwd()
1442 if (pkt->sleep_time && pkt->sleep_time < min_sleep_time) in kcdrwd()
1443 min_sleep_time = pkt->sleep_time; in kcdrwd()
1453 list_for_each_entry(pkt, &pd->cdrw.pkt_active_list, list) { in kcdrwd()
1454 if (!pkt->sleep_time) in kcdrwd()
1456 pkt->sleep_time -= min_sleep_time - residue; in kcdrwd()
1457 if (pkt->sleep_time <= 0) { in kcdrwd()
1458 pkt->sleep_time = 0; in kcdrwd()
1459 atomic_inc(&pkt->run_sm); in kcdrwd()
2323 struct packet_data *pkt; in pkt_make_request_write() local
2335 list_for_each_entry(pkt, &pd->cdrw.pkt_active_list, list) { in pkt_make_request_write()
2336 if (pkt->sector == zone) { in pkt_make_request_write()
2337 spin_lock(&pkt->lock); in pkt_make_request_write()
2338 if ((pkt->state == PACKET_WAITING_STATE) || in pkt_make_request_write()
2339 (pkt->state == PACKET_READ_WAIT_STATE)) { in pkt_make_request_write()
2340 bio_list_add(&pkt->orig_bios, bio); in pkt_make_request_write()
2341 pkt->write_size += in pkt_make_request_write()
2343 if ((pkt->write_size >= pkt->frames) && in pkt_make_request_write()
2344 (pkt->state == PACKET_WAITING_STATE)) { in pkt_make_request_write()
2345 atomic_inc(&pkt->run_sm); in pkt_make_request_write()
2348 spin_unlock(&pkt->lock); in pkt_make_request_write()
2354 spin_unlock(&pkt->lock); in pkt_make_request_write()