mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 21:54:34 -04:00
Merge branch 'locks' of git://linux-nfs.org/~bfields/linux
* 'locks' of git://linux-nfs.org/~bfields/linux: nfsd: remove IS_ISMNDLCK macro Rework /proc/locks via seq_files and seq_list helpers fs/locks.c: use list_for_each_entry() instead of list_for_each() NFS: clean up explicit check for mandatory locks AFS: clean up explicit check for mandatory locks 9PFS: clean up explicit check for mandatory locks GFS2: clean up explicit check for mandatory locks Cleanup macros for distinguishing mandatory locks Documentation: move locks.txt in filesystems/ locks: add warning about mandatory locking races Documentation: move mandatory locking documentation to filesystems/ locks: Fix potential OOPS in generic_setlease() Use list_first_entry in locks_wake_up_blocks locks: fix flock_lock_file() comment Memory shortage can result in inconsistent flocks state locks: kill redundant local variable locks: reverse order of posix_locks_conflict() arguments
This commit is contained in:
commit
541010e4b8
14 changed files with 157 additions and 146 deletions
|
|
@ -883,6 +883,7 @@ extern int vfs_setlease(struct file *, long, struct file_lock **);
|
|||
extern int lease_modify(struct file_lock **, int);
|
||||
extern int lock_may_read(struct inode *, loff_t start, unsigned long count);
|
||||
extern int lock_may_write(struct inode *, loff_t start, unsigned long count);
|
||||
extern struct seq_operations locks_seq_operations;
|
||||
|
||||
struct fasync_struct {
|
||||
int magic;
|
||||
|
|
@ -1375,12 +1376,25 @@ extern int locks_mandatory_area(int, struct inode *, struct file *, loff_t, size
|
|||
* Candidates for mandatory locking have the setgid bit set
|
||||
* but no group execute bit - an otherwise meaningless combination.
|
||||
*/
|
||||
#define MANDATORY_LOCK(inode) \
|
||||
(IS_MANDLOCK(inode) && ((inode)->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID)
|
||||
|
||||
static inline int __mandatory_lock(struct inode *ino)
|
||||
{
|
||||
return (ino->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID;
|
||||
}
|
||||
|
||||
/*
|
||||
* ... and these candidates should be on MS_MANDLOCK mounted fs,
|
||||
* otherwise these will be advisory locks
|
||||
*/
|
||||
|
||||
static inline int mandatory_lock(struct inode *ino)
|
||||
{
|
||||
return IS_MANDLOCK(ino) && __mandatory_lock(ino);
|
||||
}
|
||||
|
||||
static inline int locks_verify_locked(struct inode *inode)
|
||||
{
|
||||
if (MANDATORY_LOCK(inode))
|
||||
if (mandatory_lock(inode))
|
||||
return locks_mandatory_locked(inode);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1391,7 +1405,7 @@ static inline int locks_verify_truncate(struct inode *inode,
|
|||
struct file *filp,
|
||||
loff_t size)
|
||||
{
|
||||
if (inode->i_flock && MANDATORY_LOCK(inode))
|
||||
if (inode->i_flock && mandatory_lock(inode))
|
||||
return locks_mandatory_area(
|
||||
FLOCK_VERIFY_WRITE, inode, filp,
|
||||
size < inode->i_size ? size : inode->i_size,
|
||||
|
|
|
|||
Loading…
Reference in a new issue