Lines Matching defs: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)
290 Sg_fd *sfp;
352 sfp = sg_add_sfp(sdp);
353 if (IS_ERR(sfp)) {
354 retval = PTR_ERR(sfp);
358 filp->private_data = sfp;
388 Sg_fd *sfp;
390 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
396 kref_put(&sfp->f_ref, sg_remove_sfp);
447 Sg_fd *sfp;
463 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
468 if (sfp->force_packid)
473 srp = sg_get_rq_mark(sfp, req_pack_id, &busy);
477 retval = wait_event_interruptible(sfp->read_wait,
478 ((srp = sg_get_rq_mark(sfp, req_pack_id, &busy)) ||
485 return sg_new_read(sfp, buf, count, srp);
553 sg_remove_request(sfp, srp);
561 sg_new_read(Sg_fd * sfp, char __user *buf, size_t count, Sg_request * srp)
597 sg_remove_request(sfp, srp);
608 Sg_fd *sfp;
619 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
635 return sg_new_write(sfp, filp, buf, count,
644 if (!(srp = sg_add_request(sfp))) {
649 mutex_lock(&sfp->f_mutex);
650 if (sfp->next_cmd_len > 0) {
651 cmd_size = sfp->next_cmd_len;
652 sfp->next_cmd_len = 0; /* reset so only this write() effected */
658 mutex_unlock(&sfp->f_mutex);
667 sg_remove_request(sfp, srp);
692 sg_remove_request(sfp, srp);
710 k = sg_common_write(sfp, srp, cmnd, sfp->timeout, blocking);
715 sg_new_write(Sg_fd *sfp, struct file *file, const char __user *buf,
729 sfp->cmd_q = 1; /* when sg_io_hdr seen, set command queuing on */
730 if (!(srp = sg_add_request(sfp))) {
731 SCSI_LOG_TIMEOUT(1, sg_printk(KERN_INFO, sfp->parentdp,
738 sg_remove_request(sfp, srp);
742 sg_remove_request(sfp, srp);
746 if (hp->dxfer_len > sfp->reserve.bufflen) {
747 sg_remove_request(sfp, srp);
751 sg_remove_request(sfp, srp);
754 if (sfp->res_in_use) {
755 sg_remove_request(sfp, srp);
762 sg_remove_request(sfp, srp);
766 sg_remove_request(sfp, srp);
770 sg_remove_request(sfp, srp);
773 k = sg_common_write(sfp, srp, cmnd, timeout, blocking);
782 sg_common_write(Sg_fd * sfp, Sg_request * srp,
786 Sg_device *sdp = sfp->parentdp;
797 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
802 sg_remove_request(sfp, srp);
808 SCSI_LOG_TIMEOUT(1, sg_printk(KERN_INFO, sfp->parentdp,
811 sg_remove_request(sfp, srp);
821 sg_remove_request(sfp, srp);
833 kref_get(&sfp->f_ref); /* sg_rq_end_io() does kref_put(). */
839 static int srp_done(Sg_fd *sfp, Sg_request *srp)
844 read_lock_irqsave(&sfp->rq_list_lock, flags);
846 read_unlock_irqrestore(&sfp->rq_list_lock, flags);
860 sg_fill_request_table(Sg_fd *sfp, sg_req_info_t *rinfo)
867 list_for_each_entry(srp, &sfp->rq_list, entry) {
920 sg_ioctl_common(struct file *filp, Sg_device *sdp, Sg_fd *sfp,
938 result = sg_new_write(sfp, filp, p, SZ_SG_IO_HDR,
942 result = wait_event_interruptible(sfp->read_wait,
943 srp_done(sfp, srp));
944 write_lock_irq(&sfp->rq_list_lock);
947 write_unlock_irq(&sfp->rq_list_lock);
948 result = sg_new_read(sfp, p, SZ_SG_IO_HDR, srp);
952 write_unlock_irq(&sfp->rq_list_lock);
963 sfp->timeout_user = val;
964 sfp->timeout = mult_frac(val, HZ, USER_HZ);
969 return sfp->timeout_user;
1001 sfp->force_packid = val ? 1 : 0;
1004 read_lock_irqsave(&sfp->rq_list_lock, iflags);
1005 list_for_each_entry(srp, &sfp->rq_list, entry) {
1007 read_unlock_irqrestore(&sfp->rq_list_lock,
1012 read_unlock_irqrestore(&sfp->rq_list_lock, iflags);
1015 read_lock_irqsave(&sfp->rq_list_lock, iflags);
1017 list_for_each_entry(srp, &sfp->rq_list, entry) {
1021 read_unlock_irqrestore(&sfp->rq_list_lock, iflags);
1033 mutex_lock(&sfp->f_mutex);
1034 if (val != sfp->reserve.bufflen) {
1035 if (sfp->mmap_called ||
1036 sfp->res_in_use) {
1037 mutex_unlock(&sfp->f_mutex);
1041 sg_remove_scat(sfp, &sfp->reserve);
1042 sg_build_reserve(sfp, val);
1044 mutex_unlock(&sfp->f_mutex);
1047 val = min_t(int, sfp->reserve.bufflen,
1054 sfp->cmd_q = val ? 1 : 0;
1057 return put_user((int) sfp->cmd_q, ip);
1062 sfp->keep_orphan = val;
1065 return put_user((int) sfp->keep_orphan, ip);
1072 sfp->next_cmd_len = (val > 0) ? val : 0;
1088 read_lock_irqsave(&sfp->rq_list_lock, iflags);
1089 sg_fill_request_table(sfp, rinfo);
1090 read_unlock_irqrestore(&sfp->rq_list_lock, iflags);
1157 Sg_fd *sfp;
1160 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
1163 ret = sg_ioctl_common(filp, sdp, sfp, cmd_in, p);
1174 Sg_fd *sfp;
1179 sfp = filp->private_data;
1180 if (!sfp)
1182 sdp = sfp->parentdp;
1185 poll_wait(filp, &sfp->read_wait, wait);
1186 read_lock_irqsave(&sfp->rq_list_lock, iflags);
1187 list_for_each_entry(srp, &sfp->rq_list, entry) {
1193 read_unlock_irqrestore(&sfp->rq_list_lock, iflags);
1197 else if (!sfp->cmd_q) {
1211 Sg_fd *sfp;
1213 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
1218 return fasync_helper(fd, filp, mode, &sfp->async_qp);
1225 Sg_fd *sfp;
1230 if ((NULL == vma) || (!(sfp = (Sg_fd *) vma->vm_private_data)))
1232 rsv_schp = &sfp->reserve;
1236 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sfp->parentdp,
1265 Sg_fd *sfp;
1271 if ((!filp) || (!vma) || (!(sfp = (Sg_fd *) filp->private_data)))
1274 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sfp->parentdp,
1279 rsv_schp = &sfp->reserve;
1280 mutex_lock(&sfp->f_mutex);
1294 sfp->mmap_called = 1;
1296 vma->vm_private_data = sfp;
1299 mutex_unlock(&sfp->f_mutex);
1307 struct sg_fd *sfp = srp->parentfp;
1310 sg_remove_request(sfp, srp);
1311 kref_put(&sfp->f_ref, sg_remove_sfp);
1324 Sg_fd *sfp;
1333 sfp = srp->parentfp;
1334 if (WARN_ON(sfp == NULL))
1337 sdp = sfp->parentdp;
1392 write_lock_irqsave(&sfp->rq_list_lock, iflags);
1394 if (sfp->keep_orphan)
1400 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
1406 wake_up_interruptible(&sfp->read_wait);
1407 kill_fasync(&sfp->async_qp, SIGPOLL, POLL_IN);
1408 kref_put(&sfp->f_ref, sg_remove_sfp);
1602 Sg_fd *sfp;
1616 list_for_each_entry(sfp, &sdp->sfds, sfd_siblings) {
1617 wake_up_interruptible_all(&sfp->read_wait);
1618 kill_fasync(&sfp->async_qp, SIGPOLL, POLL_HUP);
1733 Sg_fd *sfp = srp->parentfp;
1739 Sg_scatter_hold *rsv_schp = &sfp->reserve;
1740 struct request_queue *q = sfp->parentdp->device->request_queue;
1745 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
1789 mutex_lock(&sfp->f_mutex);
1791 !sfp->res_in_use) {
1792 sfp->res_in_use = 1;
1793 sg_link_reserve(sfp, srp, dxfer_len);
1795 res = -EBUSY; /* sfp->res_in_use == 1 */
1798 mutex_unlock(&sfp->f_mutex);
1801 res = sg_build_indirect(req_schp, sfp, dxfer_len);
1803 mutex_unlock(&sfp->f_mutex);
1807 mutex_unlock(&sfp->f_mutex);
1838 Sg_fd *sfp = srp->parentfp;
1841 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
1851 sg_unlink_reserve(sfp, srp);
1853 sg_remove_scat(sfp, req_schp);
1859 sg_build_sgat(Sg_scatter_hold * schp, const Sg_fd * sfp, int tablesize)
1872 sg_build_indirect(Sg_scatter_hold * schp, Sg_fd * sfp, int buff_size)
1875 int sg_tablesize = sfp->parentdp->sg_tablesize;
1885 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
1890 mx_sc_elems = sg_build_sgat(schp, sfp, sg_tablesize);
1924 SCSI_LOG_TIMEOUT(5, sg_printk(KERN_INFO, sfp->parentdp,
1931 SCSI_LOG_TIMEOUT(5, sg_printk(KERN_INFO, sfp->parentdp,
1950 sg_remove_scat(Sg_fd * sfp, Sg_scatter_hold * schp)
1952 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
1960 sg_printk(KERN_INFO, sfp->parentdp,
2006 sg_build_reserve(Sg_fd * sfp, int req_size)
2008 Sg_scatter_hold *schp = &sfp->reserve;
2010 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
2015 if (0 == sg_build_indirect(schp, sfp, req_size))
2018 sg_remove_scat(sfp, schp);
2024 sg_link_reserve(Sg_fd * sfp, Sg_request * srp, int size)
2027 Sg_scatter_hold *rsv_schp = &sfp->reserve;
2031 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp,
2050 SCSI_LOG_TIMEOUT(1, sg_printk(KERN_INFO, sfp->parentdp,
2055 sg_unlink_reserve(Sg_fd * sfp, Sg_request * srp)
2069 sfp->res_in_use = 0;
2073 sg_get_rq_mark(Sg_fd * sfp, int pack_id, bool *busy)
2079 write_lock_irqsave(&sfp->rq_list_lock, iflags);
2080 list_for_each_entry(resp, &sfp->rq_list, entry) {
2090 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2097 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2103 sg_add_request(Sg_fd * sfp)
2107 Sg_request *rp = sfp->req_arr;
2109 write_lock_irqsave(&sfp->rq_list_lock, iflags);
2110 if (!list_empty(&sfp->rq_list)) {
2111 if (!sfp->cmd_q)
2122 rp->parentfp = sfp;
2124 list_add_tail(&rp->entry, &sfp->rq_list);
2125 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2128 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2134 sg_remove_request(Sg_fd * sfp, Sg_request * srp)
2139 if (!sfp || !srp || list_empty(&sfp->rq_list))
2141 write_lock_irqsave(&sfp->rq_list_lock, iflags);
2147 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2154 if (unlikely(atomic_read(&sfp->parentdp->detaching)))
2155 wake_up_interruptible_all(&sfp->read_wait);
2163 Sg_fd *sfp;
2167 sfp = kzalloc(sizeof(*sfp), GFP_ATOMIC | __GFP_NOWARN);
2168 if (!sfp)
2171 init_waitqueue_head(&sfp->read_wait);
2172 rwlock_init(&sfp->rq_list_lock);
2173 INIT_LIST_HEAD(&sfp->rq_list);
2174 kref_init(&sfp->f_ref);
2175 mutex_init(&sfp->f_mutex);
2176 sfp->timeout = SG_DEFAULT_TIMEOUT;
2177 sfp->timeout_user = SG_DEFAULT_TIMEOUT_USER;
2178 sfp->force_packid = SG_DEF_FORCE_PACK_ID;
2179 sfp->cmd_q = SG_DEF_COMMAND_Q;
2180 sfp->keep_orphan = SG_DEF_KEEP_ORPHAN;
2181 sfp->parentdp = sdp;
2185 kfree(sfp);
2188 list_add_tail(&sfp->sfd_siblings, &sdp->sfds);
2191 "sg_add_sfp: sfp=0x%p\n", sfp));
2197 sg_build_reserve(sfp, bufflen);
2200 sfp->reserve.bufflen,
2201 sfp->reserve.k_use_sg));
2205 return sfp;
2211 struct sg_fd *sfp = container_of(work, struct sg_fd, ew.work);
2212 struct sg_device *sdp = sfp->parentdp;
2218 write_lock_irqsave(&sfp->rq_list_lock, iflags);
2219 while (!list_empty(&sfp->rq_list)) {
2220 srp = list_first_entry(&sfp->rq_list, Sg_request, entry);
2225 write_unlock_irqrestore(&sfp->rq_list_lock, iflags);
2227 if (sfp->reserve.bufflen > 0) {
2230 (int) sfp->reserve.bufflen,
2231 (int) sfp->reserve.k_use_sg));
2232 sg_remove_scat(sfp, &sfp->reserve);
2236 "sg_remove_sfp: sfp=0x%p\n", sfp));
2237 kfree(sfp);
2247 struct sg_fd *sfp = container_of(kref, struct sg_fd, f_ref);
2248 struct sg_device *sdp = sfp->parentdp;
2252 list_del(&sfp->sfd_siblings);
2255 INIT_WORK(&sfp->ew.work, sg_remove_sfp_usercontext);
2256 schedule_work(&sfp->ew.work);