orangefs: initialize op on loop restart in orangefs_devreq_read
authorMartin Brandenburg <martin@omnibond.com>
Mon, 22 Jan 2018 20:44:52 +0000 (15:44 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 31 Jan 2018 13:03:40 +0000 (14:03 +0100)
commite1166d9491a0eb7b854d6868e62a9066c7dff277
tree82ceba843c575556a1eae27f6754aa39f6997f50
parent1d00dacda89dca83b9899fe3ed1588b08bdd4b88
orangefs: initialize op on loop restart in orangefs_devreq_read

commit a0ec1ded22e6a6bc41981fae22406835b006a66e upstream.

In orangefs_devreq_read, there is a loop which picks an op off the list
of pending ops.  If the loop fails to find an op, there is nothing to
read, and it returns EAGAIN.  If the op has been given up on, the loop
is restarted via a goto.  The bug is that the variable which the found
op is written to is not reinitialized, so if there are no more eligible
ops on the list, the code runs again on the already handled op.

This is triggered by interrupting a process while the op is being copied
to the client-core.  It's a fairly small window, but it's there.

Signed-off-by: Martin Brandenburg <martin@omnibond.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/orangefs/devorangefs-req.c