1 diff --git a/Makefile b/Makefile
2 index 7200160..d001959 100644
9 -EXTRAVERSION = .22-op1
10 +EXTRAVERSION = .23-op1
11 NAME = Holy Dancing Manatees, Batman!
14 diff --git a/fs/aio.c b/fs/aio.c
15 index b3419c5..e683b91 100644
18 @@ -1171,7 +1171,12 @@ retry:
20 if (to.timed_out) /* Only check after read evt */
23 + /* Try to only show up in io wait if there are ops
25 + if (ctx->reqs_active)
29 if (signal_pending(tsk)) {
32 diff --git a/fs/locks.c b/fs/locks.c
33 index 6428605..e6d4c3b 100644
36 @@ -1733,6 +1733,7 @@ int fcntl_setlk(unsigned int fd, struct file *filp, unsigned int cmd,
37 struct file_lock *file_lock = locks_alloc_lock();
43 if (file_lock == NULL)
44 @@ -1803,7 +1804,15 @@ again:
45 * Attempt to detect a close/fcntl race and recover by
46 * releasing the lock that was just acquired.
48 - if (!error && fcheck(fd) != filp && flock.l_type != F_UNLCK) {
50 + * we need that spin_lock here - it prevents reordering between
51 + * update of inode->i_flock and check for it done in close().
52 + * rcu_read_lock() wouldn't do.
54 + spin_lock(¤t->files->file_lock);
56 + spin_unlock(¤t->files->file_lock);
57 + if (!error && f != filp && flock.l_type != F_UNLCK) {
58 flock.l_type = F_UNLCK;
61 @@ -1859,6 +1868,7 @@ int fcntl_setlk64(unsigned int fd, struct file *filp, unsigned int cmd,
62 struct file_lock *file_lock = locks_alloc_lock();
68 if (file_lock == NULL)
69 @@ -1929,7 +1939,10 @@ again:
70 * Attempt to detect a close/fcntl race and recover by
71 * releasing the lock that was just acquired.
73 - if (!error && fcheck(fd) != filp && flock.l_type != F_UNLCK) {
74 + spin_lock(¤t->files->file_lock);
76 + spin_unlock(¤t->files->file_lock);
77 + if (!error && f != filp && flock.l_type != F_UNLCK) {
78 flock.l_type = F_UNLCK;