mirror of
https://github.com/checkpoint-restore/criu
synced 2025-09-01 14:55:39 +00:00
locks: When checking for lock being ours handle mand-locks
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
@@ -127,7 +127,10 @@ static int lock_check_fd(int lfd, struct file_lock *fl)
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = flock(lfd, LOCK_EX | LOCK_NB);
|
if (fl->fl_ltype & LOCK_MAND)
|
||||||
|
ret = flock(lfd, LOCK_MAND | LOCK_RW);
|
||||||
|
else
|
||||||
|
ret = flock(lfd, LOCK_EX | LOCK_NB);
|
||||||
pr_debug(" `- %d/%d\n", ret, errno);
|
pr_debug(" `- %d/%d\n", ret, errno);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
if (errno != EAGAIN) {
|
if (errno != EAGAIN) {
|
||||||
@@ -145,7 +148,9 @@ static int lock_check_fd(int lfd, struct file_lock *fl)
|
|||||||
* on file pointed by fd.
|
* on file pointed by fd.
|
||||||
*/
|
*/
|
||||||
pr_debug(" `- downgrading lock back\n");
|
pr_debug(" `- downgrading lock back\n");
|
||||||
if (fl->fl_ltype == F_RDLCK)
|
if (fl->fl_ltype & LOCK_MAND)
|
||||||
|
flock(lfd, fl->fl_ltype);
|
||||||
|
else if (fl->fl_ltype == F_RDLCK)
|
||||||
flock(lfd, LOCK_SH);
|
flock(lfd, LOCK_SH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user