[PATCH 4/4] locks: clean up locks_remove_posix()

From: Miklos Szeredi
Date: Fri Mar 31 2006 - 12:30:31 EST


locks_remove_posix() can use posix_lock_file() instead of doing the
lock removal by hand. posix_lock_file() now does exacly the same.

The comment about pids no longer applies, posix_lock_file() takes only
the owner into account.

Signed-off-by: Miklos Szeredi <miklos@xxxxxxxxxx>

Index: linux/fs/locks.c
===================================================================
--- linux.orig/fs/locks.c 2006-03-31 18:55:33.000000000 +0200
+++ linux/fs/locks.c 2006-03-31 18:55:34.000000000 +0200
@@ -1866,15 +1866,15 @@ out:
*/
void locks_remove_posix(struct file *filp, fl_owner_t owner)
{
- struct file_lock lock, **before;
+ struct file_lock lock;
+ struct inode *inode = filp->f_dentry->d_inode;

/*
* If there are no locks held on this file, we don't need to call
* posix_lock_file(). Another process could be setting a lock on this
* file at the same time, but we wouldn't remove that lock anyway.
*/
- before = &filp->f_dentry->d_inode->i_flock;
- if (*before == NULL)
+ if (!inode->i_flock)
return;

lock.fl_type = F_UNLCK;
@@ -1887,25 +1887,11 @@ void locks_remove_posix(struct file *fil
lock.fl_ops = NULL;
lock.fl_lmops = NULL;

- if (filp->f_op && filp->f_op->lock != NULL) {
+ if (filp->f_op && filp->f_op->lock != NULL)
filp->f_op->lock(filp, F_SETLK, &lock);
- goto out;
- }
+ else
+ __posix_lock_file(inode, &lock, NULL);

- /* Can't use posix_lock_file here; we need to remove it no matter
- * which pid we have.
- */
- lock_kernel();
- while (*before != NULL) {
- struct file_lock *fl = *before;
- if (IS_POSIX(fl) && posix_same_owner(fl, &lock)) {
- locks_delete_lock(before);
- continue;
- }
- before = &fl->fl_next;
- }
- unlock_kernel();
-out:
if (lock.fl_ops && lock.fl_ops->fl_release_private)
lock.fl_ops->fl_release_private(&lock);
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/