LINUX: Avoid premature RO volume lock error
authorAndrew Deason <adeason@sinenomine.net>
Thu, 17 Jul 2014 15:33:23 +0000 (10:33 -0500)
committerJeffrey Altman <jaltman@your-file-system.com>
Wed, 6 Aug 2014 16:55:57 +0000 (12:55 -0400)
commite0d0e6ffdbb11d5445b129ef0bd5030aec59d333
tree423705d1d3fc449c37c9ebc2cc52bfd364d5f505
parent7ca2cce89ea525c73bc1571578c316016c6c4461
LINUX: Avoid premature RO volume lock error

Commit 0fc27471e7da0c5de4addcdec1bfbca5208072cc avoids processing lock
requests for RO volumes, but it did this both in afs_lockctl() and in
the Linux-specific afs_linux_lock(). The changes in afs_linux_lock()
are incorrect, since they also avoid F_GETLK requests (whereas
afs_lockctl() just avoids F_SETLK* requests).

Additionally, the section in afs_linux_lock() incorrectly reports an
error, since it returns a positive EBADF error code, when we are
supposed to return -EBADF.

The result of all of this is that an F_GETLK F_WRLCK request for an RO
volume always fails with fcntl() returning 9 (EBADF), which is an
invalid return code for fcntl() F_GETLK (instead we should return -1
with an errno of 9). But if there are no locks, we should return
success anyway.

Just remove this section, since afs_lockctl() handles this case itself
anyway.

Thanks to Todd Lewis for reporting this issue.

Change-Id: Ia7f3f0b1bdbb922dca06be9de02a9c2b33f9ffee
Reviewed-on: http://gerrit.openafs.org/11316
Reviewed-by: Marc Dionne <marc.c.dionne@gmail.com>
Reviewed-by: D Brashear <shadow@your-file-system.com>
Reviewed-by: Chas Williams - CONTRACTOR <chas@cmf.nrl.navy.mil>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
src/afs/LINUX/osi_vnodeops.c