diff options
author | Jeff Layton <jlayton@redhat.com> | 2012-08-02 21:46:30 +0200 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2012-08-21 00:39:42 +0200 |
commit | 0ee5c6d632324a4b278cb0b29eb8effce4c8a358 (patch) | |
tree | 45d5e778a46277a8d2742facee76c2cf2d649f09 /fs/locks.c | |
parent | svcrpc: fix svc_xprt_enqueue/svc_recv busy-looping (diff) | |
download | linux-0ee5c6d632324a4b278cb0b29eb8effce4c8a358.tar.xz linux-0ee5c6d632324a4b278cb0b29eb8effce4c8a358.zip |
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>
Diffstat (limited to 'fs/locks.c')
-rw-r--r-- | fs/locks.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/locks.c b/fs/locks.c index 7e81bfc75164..669911e4af9d 100644 --- a/fs/locks.c +++ b/fs/locks.c @@ -1289,7 +1289,7 @@ EXPORT_SYMBOL(__break_lease); void lease_get_mtime(struct inode *inode, struct timespec *time) { 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); else *time = inode->i_mtime; @@ -2187,8 +2187,8 @@ static void lock_get_status(struct seq_file *f, struct file_lock *fl, } else { seq_printf(f, "%s ", (lease_breaking(fl)) - ? (fl->fl_type & F_UNLCK) ? "UNLCK" : "READ " - : (fl->fl_type & F_WRLCK) ? "WRITE" : "READ "); + ? (fl->fl_type == F_UNLCK) ? "UNLCK" : "READ " + : (fl->fl_type == F_WRLCK) ? "WRITE" : "READ "); } if (inode) { #ifdef WE_CAN_BREAK_LSLK_NOW |