pkt_scan = gspca_dev->sd_desc->pkt_scan;
        for (i = 0; i < urb->number_of_packets; i++) {
 
-               /* check the availability of the frame buffer */
-               if ((gspca_dev->cur_frame->v4l2_buf.flags & BUF_ALL_FLAGS)
-                                       != V4L2_BUF_FLAG_QUEUED) {
-                       gspca_dev->last_packet_type = DISCARD_PACKET;
-                       break;
-               }
-
                /* check the packet status and length */
                len = urb->iso_frame_desc[i].actual_length;
                if (len == 0) {
                goto resubmit;
        }
 
-       /* check the availability of the frame buffer */
-       if ((gspca_dev->cur_frame->v4l2_buf.flags & BUF_ALL_FLAGS)
-                               != V4L2_BUF_FLAG_QUEUED) {
-               gspca_dev->last_packet_type = DISCARD_PACKET;
-       } else {
-               PDEBUG(D_PACK, "packet l:%d", urb->actual_length);
-               gspca_dev->sd_desc->pkt_scan(gspca_dev,
-                                       gspca_dev->frame,
-                                       urb->transfer_buffer,
-                                       urb->actual_length);
-       }
+       PDEBUG(D_PACK, "packet l:%d", urb->actual_length);
+       gspca_dev->sd_desc->pkt_scan(gspca_dev,
+                               gspca_dev->frame,
+                               urb->transfer_buffer,
+                               urb->actual_length);
 
 resubmit:
        /* resubmit the URB */
        int i, j;
 
        PDEBUG(D_PACK, "add t:%d l:%d", packet_type, len);
+
+       /* check the availability of the frame buffer */
        frame = gspca_dev->cur_frame;
+       if ((frame->v4l2_buf.flags & BUF_ALL_FLAGS)
+                                       != V4L2_BUF_FLAG_QUEUED) {
+               gspca_dev->last_packet_type = DISCARD_PACKET;
+               return frame;
+       }
 
        /* when start of a new frame, if the current frame buffer
         * is not queued, discard the whole frame */
        if (packet_type == FIRST_PACKET) {
-               if ((frame->v4l2_buf.flags & BUF_ALL_FLAGS)
-                                               != V4L2_BUF_FLAG_QUEUED) {
-                       gspca_dev->last_packet_type = DISCARD_PACKET;
-                       return frame;
-               }
                frame->data_end = frame->data;
                jiffies_to_timeval(get_jiffies_64(),
                                   &frame->v4l2_buf.timestamp);