diff options
Diffstat (limited to 'include/linux/fs.h')
-rw-r--r-- | include/linux/fs.h | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index 16421f662a7a..f5075e0e7301 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -1369,12 +1369,25 @@ extern int locks_mandatory_area(int, struct inode *, struct file *, loff_t, size | |||
1369 | * Candidates for mandatory locking have the setgid bit set | 1369 | * Candidates for mandatory locking have the setgid bit set |
1370 | * but no group execute bit - an otherwise meaningless combination. | 1370 | * but no group execute bit - an otherwise meaningless combination. |
1371 | */ | 1371 | */ |
1372 | #define MANDATORY_LOCK(inode) \ | 1372 | |
1373 | (IS_MANDLOCK(inode) && ((inode)->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID) | 1373 | static inline int __mandatory_lock(struct inode *ino) |
1374 | { | ||
1375 | return (ino->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID; | ||
1376 | } | ||
1377 | |||
1378 | /* | ||
1379 | * ... and these candidates should be on MS_MANDLOCK mounted fs, | ||
1380 | * otherwise these will be advisory locks | ||
1381 | */ | ||
1382 | |||
1383 | static inline int mandatory_lock(struct inode *ino) | ||
1384 | { | ||
1385 | return IS_MANDLOCK(ino) && __mandatory_lock(ino); | ||
1386 | } | ||
1374 | 1387 | ||
1375 | static inline int locks_verify_locked(struct inode *inode) | 1388 | static inline int locks_verify_locked(struct inode *inode) |
1376 | { | 1389 | { |
1377 | if (MANDATORY_LOCK(inode)) | 1390 | if (mandatory_lock(inode)) |
1378 | return locks_mandatory_locked(inode); | 1391 | return locks_mandatory_locked(inode); |
1379 | return 0; | 1392 | return 0; |
1380 | } | 1393 | } |
@@ -1385,7 +1398,7 @@ static inline int locks_verify_truncate(struct inode *inode, | |||
1385 | struct file *filp, | 1398 | struct file *filp, |
1386 | loff_t size) | 1399 | loff_t size) |
1387 | { | 1400 | { |
1388 | if (inode->i_flock && MANDATORY_LOCK(inode)) | 1401 | if (inode->i_flock && mandatory_lock(inode)) |
1389 | return locks_mandatory_area( | 1402 | return locks_mandatory_area( |
1390 | FLOCK_VERIFY_WRITE, inode, filp, | 1403 | FLOCK_VERIFY_WRITE, inode, filp, |
1391 | size < inode->i_size ? size : inode->i_size, | 1404 | size < inode->i_size ? size : inode->i_size, |