|
@@ -1119,7 +1119,7 @@ int locks_mandatory_area(int read_write, struct inode *inode,
|
|
|
* If we've been sleeping someone might have
|
|
|
* changed the permissions behind our back.
|
|
|
*/
|
|
|
- if ((inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID)
|
|
|
+ if (__mandatory_lock(inode))
|
|
|
continue;
|
|
|
}
|
|
|
|
|
@@ -1761,9 +1761,7 @@ int fcntl_setlk(unsigned int fd, struct file *filp, unsigned int cmd,
|
|
|
/* Don't allow mandatory locks on files that may be memory mapped
|
|
|
* and shared.
|
|
|
*/
|
|
|
- if (IS_MANDLOCK(inode) &&
|
|
|
- (inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID &&
|
|
|
- mapping_writably_mapped(filp->f_mapping)) {
|
|
|
+ if (mandatory_lock(inode) && mapping_writably_mapped(filp->f_mapping)) {
|
|
|
error = -EAGAIN;
|
|
|
goto out;
|
|
|
}
|
|
@@ -1887,9 +1885,7 @@ int fcntl_setlk64(unsigned int fd, struct file *filp, unsigned int cmd,
|
|
|
/* Don't allow mandatory locks on files that may be memory mapped
|
|
|
* and shared.
|
|
|
*/
|
|
|
- if (IS_MANDLOCK(inode) &&
|
|
|
- (inode->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID &&
|
|
|
- mapping_writably_mapped(filp->f_mapping)) {
|
|
|
+ if (mandatory_lock(inode) && mapping_writably_mapped(filp->f_mapping)) {
|
|
|
error = -EAGAIN;
|
|
|
goto out;
|
|
|
}
|
|
@@ -2083,9 +2079,7 @@ static void lock_get_status(char* out, struct file_lock *fl, int id, char *pfx)
|
|
|
out += sprintf(out, "%6s %s ",
|
|
|
(fl->fl_flags & FL_ACCESS) ? "ACCESS" : "POSIX ",
|
|
|
(inode == NULL) ? "*NOINODE*" :
|
|
|
- (IS_MANDLOCK(inode) &&
|
|
|
- (inode->i_mode & (S_IXGRP | S_ISGID)) == S_ISGID) ?
|
|
|
- "MANDATORY" : "ADVISORY ");
|
|
|
+ mandatory_lock(inode) ? "MANDATORY" : "ADVISORY ");
|
|
|
} else if (IS_FLOCK(fl)) {
|
|
|
if (fl->fl_type & LOCK_MAND) {
|
|
|
out += sprintf(out, "FLOCK MSNFS ");
|