diff options
Diffstat (limited to 'fs/locks.c')
-rw-r--r-- | fs/locks.c | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/fs/locks.c b/fs/locks.c index 43dbc7f566fa..9a3fe0d8285b 100644 --- a/fs/locks.c +++ b/fs/locks.c | |||
@@ -1119,7 +1119,7 @@ int locks_mandatory_area(int read_write, struct inode *inode, | |||
1119 | * If we've been sleeping someone might have | 1119 | * If we've been sleeping someone might have |
1120 | * changed the permissions behind our back. | 1120 | * changed the permissions behind our back. |
1121 | */ | 1121 | */ |
1122 | if ((inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID) | 1122 | if (__mandatory_lock(inode)) |
1123 | continue; | 1123 | continue; |
1124 | } | 1124 | } |
1125 | 1125 | ||
@@ -1761,9 +1761,7 @@ int fcntl_setlk(unsigned int fd, struct file *filp, unsigned int cmd, | |||
1761 | /* Don't allow mandatory locks on files that may be memory mapped | 1761 | /* Don't allow mandatory locks on files that may be memory mapped |
1762 | * and shared. | 1762 | * and shared. |
1763 | */ | 1763 | */ |
1764 | if (IS_MANDLOCK(inode) && | 1764 | if (mandatory_lock(inode) && mapping_writably_mapped(filp->f_mapping)) { |
1765 | (inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID && | ||
1766 | mapping_writably_mapped(filp->f_mapping)) { | ||
1767 | error = -EAGAIN; | 1765 | error = -EAGAIN; |
1768 | goto out; | 1766 | goto out; |
1769 | } | 1767 | } |
@@ -1887,9 +1885,7 @@ int fcntl_setlk64(unsigned int fd, struct file *filp, unsigned int cmd, | |||
1887 | /* Don't allow mandatory locks on files that may be memory mapped | 1885 | /* Don't allow mandatory locks on files that may be memory mapped |
1888 | * and shared. | 1886 | * and shared. |
1889 | */ | 1887 | */ |
1890 | if (IS_MANDLOCK(inode) && | 1888 | if (mandatory_lock(inode) && mapping_writably_mapped(filp->f_mapping)) { |
1891 | (inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID && | ||
1892 | mapping_writably_mapped(filp->f_mapping)) { | ||
1893 | error = -EAGAIN; | 1889 | error = -EAGAIN; |
1894 | goto out; | 1890 | goto out; |
1895 | } | 1891 | } |
@@ -2083,9 +2079,7 @@ static void lock_get_status(char* out, struct file_lock *fl, int id, char *pfx) | |||
2083 | out += sprintf(out, "%6s %s ", | 2079 | out += sprintf(out, "%6s %s ", |
2084 | (fl->fl_flags & FL_ACCESS) ? "ACCESS" : "POSIX ", | 2080 | (fl->fl_flags & FL_ACCESS) ? "ACCESS" : "POSIX ", |
2085 | (inode == NULL) ? "*NOINODE*" : | 2081 | (inode == NULL) ? "*NOINODE*" : |
2086 | (IS_MANDLOCK(inode) && | 2082 | mandatory_lock(inode) ? "MANDATORY" : "ADVISORY "); |
2087 | (inode->i_mode & (S_IXGRP | S_ISGID)) == S_ISGID) ? | ||
2088 | "MANDATORY" : "ADVISORY "); | ||
2089 | } else if (IS_FLOCK(fl)) { | 2083 | } else if (IS_FLOCK(fl)) { |
2090 | if (fl->fl_type & LOCK_MAND) { | 2084 | if (fl->fl_type & LOCK_MAND) { |
2091 | out += sprintf(out, "FLOCK MSNFS "); | 2085 | out += sprintf(out, "FLOCK MSNFS "); |