1diff --git a/v4l2loopback.c b/v4l2loopback.c
2index 2ab1f76..2514f09 100644
3--- a/v4l2loopback.c
4+++ b/v4l2loopback.c
5@@ -92,17 +92,6 @@ MODULE_LICENSE("GPL");
6 } \
7 } while (0)
8
9-/* TODO: Make sure that function is never interrupted. */
10-static inline int mod_inc(int *number, int mod)
11-{
12- int result;
13- result = (*number + 1) % mod;
14- if (unlikely(result < 0))
15- result += mod;
16- *number = result;
17- return result;
18-}
19-
20 static inline void v4l2l_get_timestamp(struct v4l2_buffer *b)
21 {
22 /* ktime_get_ts is considered deprecated, so use ktime_get_ts64 if possible */
23@@ -1424,8 +1413,9 @@ static int vidioc_reqbufs(struct file *file, void *fh,
24 i = dev->write_position;
25 list_for_each_entry(pos, &dev->outbufs_list,
26 list_head) {
27- dev->bufpos2index[mod_inc(&i, b->count)] =
28+ dev->bufpos2index[i % b->count] =
29 pos->buffer.index;
30+ ++i;
31 }
32 }
33
34@@ -1489,9 +1479,10 @@ static void buffer_written(struct v4l2_loopback_device *dev,
35 del_timer_sync(&dev->timeout_timer);
36 spin_lock_bh(&dev->lock);
37
38- dev->bufpos2index[mod_inc(&dev->write_position, dev->used_buffers)] =
39+ dev->bufpos2index[dev->write_position % dev->used_buffers] =
40 buf->buffer.index;
41 list_move_tail(&buf->list_head, &dev->outbufs_list);
42+ ++dev->write_position;
43 dev->reread_count = 0;
44
45 check_timers(dev);
46@@ -1586,7 +1577,8 @@ static int get_capture_buffer(struct file *file)
47 if (dev->write_position >
48 opener->read_position + dev->used_buffers)
49 opener->read_position = dev->write_position - 1;
50- pos = mod_inc(&opener->read_position, dev->used_buffers);
51+ pos = opener->read_position % dev->used_buffers;
52+ ++opener->read_position;
53 }
54 timeout_happened = dev->timeout_happened;
55 dev->timeout_happened = 0;