aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/locks.c48
1 files changed, 28 insertions, 20 deletions
diff --git a/fs/locks.c b/fs/locks.c
index d83fab1b77b5..43c0af21a0c5 100644
--- a/fs/locks.c
+++ b/fs/locks.c
@@ -1801,17 +1801,21 @@ again:
1801 if (error) 1801 if (error)
1802 goto out; 1802 goto out;
1803 1803
1804 for (;;) { 1804 if (filp->f_op && filp->f_op->lock != NULL)
1805 error = vfs_lock_file(filp, cmd, file_lock, NULL); 1805 error = filp->f_op->lock(filp, cmd, file_lock);
1806 if (error != -EAGAIN || cmd == F_SETLK) 1806 else {
1807 break; 1807 for (;;) {
1808 error = wait_event_interruptible(file_lock->fl_wait, 1808 error = posix_lock_file(filp, file_lock, NULL);
1809 !file_lock->fl_next); 1809 if (error != -EAGAIN || cmd == F_SETLK)
1810 if (!error) 1810 break;
1811 continue; 1811 error = wait_event_interruptible(file_lock->fl_wait,
1812 !file_lock->fl_next);
1813 if (!error)
1814 continue;
1812 1815
1813 locks_delete_block(file_lock); 1816 locks_delete_block(file_lock);
1814 break; 1817 break;
1818 }
1815 } 1819 }
1816 1820
1817 /* 1821 /*
@@ -1925,17 +1929,21 @@ again:
1925 if (error) 1929 if (error)
1926 goto out; 1930 goto out;
1927 1931
1928 for (;;) { 1932 if (filp->f_op && filp->f_op->lock != NULL)
1929 error = vfs_lock_file(filp, cmd, file_lock, NULL); 1933 error = filp->f_op->lock(filp, cmd, file_lock);
1930 if (error != -EAGAIN || cmd == F_SETLK64) 1934 else {
1931 break; 1935 for (;;) {
1932 error = wait_event_interruptible(file_lock->fl_wait, 1936 error = posix_lock_file(filp, file_lock, NULL);
1933 !file_lock->fl_next); 1937 if (error != -EAGAIN || cmd == F_SETLK64)
1934 if (!error) 1938 break;
1935 continue; 1939 error = wait_event_interruptible(file_lock->fl_wait,
1940 !file_lock->fl_next);
1941 if (!error)
1942 continue;
1936 1943
1937 locks_delete_block(file_lock); 1944 locks_delete_block(file_lock);
1938 break; 1945 break;
1946 }
1939 } 1947 }
1940 1948
1941 /* 1949 /*