vfs: don't treat fl_type as a bitmap
The rules for fl_type are rather convoluted. Typically it's treated as holding specific values, except in the case of LOCK_MAND, in which case it can be or'ed with LOCK_READ|LOCK_WRITE. On some arches F_WRLCK == 2 and F_UNLCK == 3, so and'ing with F_WRLCK will also catch the F_UNLCK case. It's unlikely in either case here that we'd ever see F_UNLCK since those shouldn't end up on any lists, but it's still best to be consistent. Signed-off-by: Jeff Layton <jlayton@redhat.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
Родитель
d10f27a750
Коммит
0ee5c6d632
|
@ -1289,7 +1289,7 @@ EXPORT_SYMBOL(__break_lease);
|
||||||
void lease_get_mtime(struct inode *inode, struct timespec *time)
|
void lease_get_mtime(struct inode *inode, struct timespec *time)
|
||||||
{
|
{
|
||||||
struct file_lock *flock = inode->i_flock;
|
struct file_lock *flock = inode->i_flock;
|
||||||
if (flock && IS_LEASE(flock) && (flock->fl_type & F_WRLCK))
|
if (flock && IS_LEASE(flock) && (flock->fl_type == F_WRLCK))
|
||||||
*time = current_fs_time(inode->i_sb);
|
*time = current_fs_time(inode->i_sb);
|
||||||
else
|
else
|
||||||
*time = inode->i_mtime;
|
*time = inode->i_mtime;
|
||||||
|
@ -2187,8 +2187,8 @@ static void lock_get_status(struct seq_file *f, struct file_lock *fl,
|
||||||
} else {
|
} else {
|
||||||
seq_printf(f, "%s ",
|
seq_printf(f, "%s ",
|
||||||
(lease_breaking(fl))
|
(lease_breaking(fl))
|
||||||
? (fl->fl_type & F_UNLCK) ? "UNLCK" : "READ "
|
? (fl->fl_type == F_UNLCK) ? "UNLCK" : "READ "
|
||||||
: (fl->fl_type & F_WRLCK) ? "WRITE" : "READ ");
|
: (fl->fl_type == F_WRLCK) ? "WRITE" : "READ ");
|
||||||
}
|
}
|
||||||
if (inode) {
|
if (inode) {
|
||||||
#ifdef WE_CAN_BREAK_LSLK_NOW
|
#ifdef WE_CAN_BREAK_LSLK_NOW
|
||||||
|
|
Загрузка…
Ссылка в новой задаче