Lines Matching refs:sfp
183 static int sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size);
184 static ssize_t sg_new_read(Sg_fd * sfp, char __user *buf, size_t count,
186 static ssize_t sg_new_write(Sg_fd *sfp, struct file *file,
189 static int sg_common_write(Sg_fd * sfp, Sg_request * srp,
192 static void sg_remove_scat(Sg_fd * sfp, Sg_scatter_hold * schp);
193 static void sg_build_reserve(Sg_fd * sfp, int req_size);
194 static void sg_link_reserve(Sg_fd * sfp, Sg_request * srp, int size);
195 static void sg_unlink_reserve(Sg_fd * sfp, Sg_request * srp);
198 static Sg_request *sg_get_rq_mark(Sg_fd * sfp, int pack_id, bool *busy);
199 static Sg_request *sg_add_request(Sg_fd * sfp);
200 static int sg_remove_request(Sg_fd * sfp, Sg_request * srp);
236 struct sg_fd *sfp = filp->private_data;
238 if (sfp->parentdp->device->type == TYPE_SCANNER)
289 Sg_fd *sfp;
350 sfp = sg_add_sfp(sdp);
351 if (IS_ERR(sfp)) {
352 retval = PTR_ERR(sfp);
356 filp->private_data = sfp;
385 Sg_fd *sfp;
387 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
393 kref_put(&sfp->f_ref, sg_remove_sfp);
444 Sg_fd *sfp;
460 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
465 if (sfp->force_packid)
470 srp = sg_get_rq_mark(sfp, req_pack_id, &busy);
474 retval = wait_event_interruptible(sfp->read_wait,
475 ((srp = sg_get_rq_mark(sfp, req_pack_id, &busy)) ||
482 return sg_new_read(sfp, buf, count, srp);
550 sg_remove_request(sfp, srp);
558 sg_new_read(Sg_fd * sfp, char __user *buf, size_t count, Sg_request * srp)
594 sg_remove_request(sfp, srp);
605 Sg_fd *sfp;
616 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
632 return sg_new_write(sfp, filp, buf, count,
641 if (!(srp = sg_add_request(sfp))) {
646 mutex_lock(&sfp->f_mutex);
647 if (sfp->next_cmd_len > 0) {
648 cmd_size = sfp->next_cmd_len;
649 sfp->next_cmd_len = 0; /* reset so only this write() effected */
655 mutex_unlock(&sfp->f_mutex);
664 sg_remove_request(sfp, srp);
689 sg_remove_request(sfp, srp);
707 k = sg_common_write(sfp, srp, cmnd, sfp->timeout, blocking);
712 sg_new_write(Sg_fd *sfp, struct file *file, const char __user *buf,
726 sfp->cmd_q = 1; /* when sg_io_hdr seen, set command queuing on */
727 if (!(srp = sg_add_request(sfp))) {
728 SCSI_LOG_TIMEOUT(1, sg_printk(KERN_INFO, sfp->parentdp,
735 sg_remove_request(sfp, srp);
739 sg_remove_request(sfp, srp);
743 if (hp->dxfer_len > sfp->reserve.bufflen) {
744 sg_remove_request(sfp, srp);
748 sg_remove_request(sfp, srp);
751 if (sfp->res_in_use) {
752 sg_remove_request(sfp, srp);
759 sg_remove_request(sfp, srp);
763 sg_remove_request(sfp, srp);
767 sg_remove_request(sfp, srp);
770 k = sg_common_write(sfp, srp, cmnd, timeout, blocking);
779 sg_common_write(Sg_fd * sfp, Sg_request * srp,
783 Sg_device *sdp = sfp->parentdp;
794 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
799 sg_remove_request(sfp, srp);
805 SCSI_LOG_TIMEOUT(1, sg_printk(KERN_INFO, sfp->parentdp,
808 sg_remove_request(sfp, srp);
818 sg_remove_request(sfp, srp);
830 kref_get(&sfp->f_ref); /* sg_rq_end_io() does kref_put(). */
836 static int srp_done(Sg_fd *sfp, Sg_request *srp)
841 read_lock_irqsave(&sfp->rq_list_lock, flags);
843 read_unlock_irqrestore(&sfp->rq_list_lock, flags);
857 sg_fill_request_table(Sg_fd *sfp, sg_req_info_t *rinfo)
864 list_for_each_entry(srp, &sfp->rq_list, entry) {
917 sg_ioctl_common(struct file *filp, Sg_device *sdp, Sg_fd *sfp,
935 result = sg_new_write(sfp, filp, p, SZ_SG_IO_HDR,
939 result = wait_event_interruptible(sfp->read_wait,
940 srp_done(sfp, srp));
941 write_lock_irq(&sfp->rq_list_lock);
944 write_unlock_irq(&sfp->rq_list_lock);
945 result = sg_new_read(sfp, p, SZ_SG_IO_HDR, srp);
949 write_unlock_irq(&sfp->rq_list_lock);
960 sfp->timeout_user = val;
961 sfp->timeout = mult_frac(val, HZ, USER_HZ);
966 return sfp->timeout_user;
998 sfp->force_packid = val ? 1 : 0;
1001 read_lock_irqsave(&sfp->rq_list_lock, iflags);
1002 list_for_each_entry(srp, &sfp->rq_list, entry) {
1004 read_unlock_irqrestore(&sfp->rq_list_lock,
1009 read_unlock_irqrestore(&sfp->rq_list_lock, iflags);
1012 read_lock_irqsave(&sfp->rq_list_lock, iflags);
1014 list_for_each_entry(srp, &sfp->rq_list, entry) {
1018 read_unlock_irqrestore(&sfp->rq_list_lock, iflags);
1030 mutex_lock(&sfp->f_mutex);
1031 if (val != sfp->reserve.bufflen) {
1032 if (sfp->mmap_called ||
1033 sfp->res_in_use) {
1034 mutex_unlock(&sfp->f_mutex);
1038 sg_remove_scat(sfp, &sfp->reserve);
1039 sg_build_reserve(sfp, val);
1041 mutex_unlock(&sfp->f_mutex);
1044 val = min_t(int, sfp->reserve.bufflen,
1051 sfp->cmd_q = val ? 1 : 0;
1054 return put_user((int) sfp->cmd_q, ip);
1059 sfp->keep_orphan = val;
1062 return put_user((int) sfp->keep_orphan, ip);
1069 sfp->next_cmd_len = (val > 0) ? val : 0;
1085 read_lock_irqsave(&sfp->rq_list_lock, iflags);
1086 sg_fill_request_table(sfp, rinfo);
1087 read_unlock_irqrestore(&sfp->rq_list_lock, iflags);
1154 Sg_fd *sfp;
1157 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
1160 ret = sg_ioctl_common(filp, sdp, sfp, cmd_in, p);
1171 Sg_fd *sfp;
1176 sfp = filp->private_data;
1177 if (!sfp)
1179 sdp = sfp->parentdp;
1182 poll_wait(filp, &sfp->read_wait, wait);
1183 read_lock_irqsave(&sfp->rq_list_lock, iflags);
1184 list_for_each_entry(srp, &sfp->rq_list, entry) {
1190 read_unlock_irqrestore(&sfp->rq_list_lock, iflags);
1194 else if (!sfp->cmd_q) {
1208 Sg_fd *sfp;
1210 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
1215 return fasync_helper(fd, filp, mode, &sfp->async_qp);
1222 Sg_fd *sfp;
1227 if ((NULL == vma) || (!(sfp = (Sg_fd *) vma->vm_private_data)))
1229 rsv_schp = &sfp->reserve;
1233 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sfp->parentdp,
1262 Sg_fd *sfp;
1268 if ((!filp) || (!vma) || (!(sfp = (Sg_fd *) filp->private_data)))
1271 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sfp->parentdp,
1276 rsv_schp = &sfp->reserve;
1277 mutex_lock(&sfp->f_mutex);
1291 sfp->mmap_called = 1;
1293 vma->vm_private_data = sfp;
1296 mutex_unlock(&sfp->f_mutex);
1304 struct sg_fd *sfp = srp->parentfp;
1307 sg_remove_request(sfp, srp);
1308 kref_put(&sfp->f_ref, sg_remove_sfp);
1321 Sg_fd *sfp;
1330 sfp = srp->parentfp;
1331 if (WARN_ON(sfp == NULL))
1334 sdp = sfp->parentdp;
1389 write_lock_irqsave(&sfp->rq_list_lock, iflags);
1391 if (sfp->keep_orphan)
1397 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
1403 wake_up_interruptible(&sfp->read_wait);
1404 kill_fasync(&sfp->async_qp, SIGPOLL, POLL_IN);
1405 kref_put(&sfp->f_ref, sg_remove_sfp);
1597 Sg_fd *sfp;
1611 list_for_each_entry(sfp, &sdp->sfds, sfd_siblings) {
1612 wake_up_interruptible_all(&sfp->read_wait);
1613 kill_fasync(&sfp->async_qp, SIGPOLL, POLL_HUP);
1731 Sg_fd *sfp = srp->parentfp;
1737 Sg_scatter_hold *rsv_schp = &sfp->reserve;
1738 struct request_queue *q = sfp->parentdp->device->request_queue;
1743 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
1787 mutex_lock(&sfp->f_mutex);
1789 !sfp->res_in_use) {
1790 sfp->res_in_use = 1;
1791 sg_link_reserve(sfp, srp, dxfer_len);
1793 res = -EBUSY; /* sfp->res_in_use == 1 */
1796 mutex_unlock(&sfp->f_mutex);
1799 res = sg_build_indirect(req_schp, sfp, dxfer_len);
1801 mutex_unlock(&sfp->f_mutex);
1805 mutex_unlock(&sfp->f_mutex);
1836 Sg_fd *sfp = srp->parentfp;
1839 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
1849 sg_unlink_reserve(sfp, srp);
1851 sg_remove_scat(sfp, req_schp);
1857 sg_build_sgat(Sg_scatter_hold * schp, const Sg_fd * sfp, int tablesize)
1870 sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size)
1873 int sg_tablesize = sfp->parentdp->sg_tablesize;
1883 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
1888 mx_sc_elems = sg_build_sgat(schp, sfp, sg_tablesize);
1922 SCSI_LOG_TIMEOUT(5, sg_printk(KERN_INFO, sfp->parentdp,
1929 SCSI_LOG_TIMEOUT(5, sg_printk(KERN_INFO, sfp->parentdp,
1948 sg_remove_scat(Sg_fd * sfp, Sg_scatter_hold * schp)
1950 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
1958 sg_printk(KERN_INFO, sfp->parentdp,
2004 sg_build_reserve(Sg_fd * sfp, int req_size)
2006 Sg_scatter_hold *schp = &sfp->reserve;
2008 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
2013 if (0 == sg_build_indirect(schp, sfp, req_size))
2016 sg_remove_scat(sfp, schp);
2022 sg_link_reserve(Sg_fd * sfp, Sg_request * srp, int size)
2025 Sg_scatter_hold *rsv_schp = &sfp->reserve;
2029 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
2048 SCSI_LOG_TIMEOUT(1, sg_printk(KERN_INFO, sfp->parentdp,
2053 sg_unlink_reserve(Sg_fd * sfp, Sg_request * srp)
2067 sfp->res_in_use = 0;
2071 sg_get_rq_mark(Sg_fd * sfp, int pack_id, bool *busy)
2077 write_lock_irqsave(&sfp->rq_list_lock, iflags);
2078 list_for_each_entry(resp, &sfp->rq_list, entry) {
2088 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2095 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2101 sg_add_request(Sg_fd * sfp)
2105 Sg_request *rp = sfp->req_arr;
2107 write_lock_irqsave(&sfp->rq_list_lock, iflags);
2108 if (!list_empty(&sfp->rq_list)) {
2109 if (!sfp->cmd_q)
2120 rp->parentfp = sfp;
2122 list_add_tail(&rp->entry, &sfp->rq_list);
2123 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2126 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2132 sg_remove_request(Sg_fd * sfp, Sg_request * srp)
2137 if (!sfp || !srp || list_empty(&sfp->rq_list))
2139 write_lock_irqsave(&sfp->rq_list_lock, iflags);
2145 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2152 if (unlikely(atomic_read(&sfp->parentdp->detaching)))
2153 wake_up_interruptible_all(&sfp->read_wait);
2161 Sg_fd *sfp;
2165 sfp = kzalloc(sizeof(*sfp), GFP_ATOMIC | __GFP_NOWARN);
2166 if (!sfp)
2169 init_waitqueue_head(&sfp->read_wait);
2170 rwlock_init(&sfp->rq_list_lock);
2171 INIT_LIST_HEAD(&sfp->rq_list);
2172 kref_init(&sfp->f_ref);
2173 mutex_init(&sfp->f_mutex);
2174 sfp->timeout = SG_DEFAULT_TIMEOUT;
2175 sfp->timeout_user = SG_DEFAULT_TIMEOUT_USER;
2176 sfp->force_packid = SG_DEF_FORCE_PACK_ID;
2177 sfp->cmd_q = SG_DEF_COMMAND_Q;
2178 sfp->keep_orphan = SG_DEF_KEEP_ORPHAN;
2179 sfp->parentdp = sdp;
2183 kfree(sfp);
2186 list_add_tail(&sfp->sfd_siblings, &sdp->sfds);
2189 "sg_add_sfp: sfp=0x%p\n", sfp));
2195 sg_build_reserve(sfp, bufflen);
2198 sfp->reserve.bufflen,
2199 sfp->reserve.k_use_sg));
2203 return sfp;
2209 struct sg_fd *sfp = container_of(work, struct sg_fd, ew.work);
2210 struct sg_device *sdp = sfp->parentdp;
2215 write_lock_irqsave(&sfp->rq_list_lock, iflags);
2216 while (!list_empty(&sfp->rq_list)) {
2217 srp = list_first_entry(&sfp->rq_list, Sg_request, entry);
2222 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2224 if (sfp->reserve.bufflen > 0) {
2227 (int) sfp->reserve.bufflen,
2228 (int) sfp->reserve.k_use_sg));
2229 sg_remove_scat(sfp, &sfp->reserve);
2233 "sg_remove_sfp: sfp=0x%p\n", sfp));
2234 kfree(sfp);
2244 struct sg_fd *sfp = container_of(kref, struct sg_fd, f_ref);
2245 struct sg_device *sdp = sfp->parentdp;
2249 list_del(&sfp->sfd_siblings);
2252 INIT_WORK(&sfp->ew.work, sg_remove_sfp_usercontext);
2253 schedule_work(&sfp->ew.work);