Thanks for any help.
Andy
--- Matthew Wilcox <willy@debian.org> wrote:
>
> Yep, 2.4 & 2.5 are broken. Here's a patch which
> both marcelo and alan
> refuse to apply, but fixes the problem.
>
> diff -urNX dontdiff linux-2418/fs/locks.c
> linux-2418-acct/fs/locks.c
> --- linux-2418/fs/locks.c Thu Oct 11 08:52:18 2001
> +++ linux-2418-acct/fs/locks.c Mon Jul 1 16:23:36
> 2002
> @@ -134,15 +134,9 @@
> static kmem_cache_t *filelock_cache;
>
> /* Allocate an empty lock structure. */
> -static struct file_lock *locks_alloc_lock(int
> account)
> +static struct file_lock *locks_alloc_lock(void)
> {
> - struct file_lock *fl;
> - if (account && current->locks >=
> current->rlim[RLIMIT_LOCKS].rlim_cur)
> - return NULL;
> - fl = kmem_cache_alloc(filelock_cache,
> SLAB_KERNEL);
> - if (fl)
> - current->locks++;
> - return fl;
> + return kmem_cache_alloc(filelock_cache,
> SLAB_KERNEL);
> }
>
> /* Free a lock which is not in use. */
> @@ -152,7 +146,6 @@
> BUG();
> return;
> }
> - current->locks--;
> if (waitqueue_active(&fl->fl_wait))
> panic("Attempting to free lock with active wait
> queue");
>
> @@ -219,7 +212,7 @@
> /* Fill in a file_lock structure with an
> appropriate FLOCK lock. */
> static struct file_lock *flock_make_lock(struct
> file *filp, unsigned int type)
> {
> - struct file_lock *fl = locks_alloc_lock(1);
> + struct file_lock *fl = locks_alloc_lock();
> if (fl == NULL)
> return NULL;
>
> @@ -348,7 +341,7 @@
> /* Allocate a file_lock initialised to this type of
> lease */
> static int lease_alloc(struct file *filp, int type,
> struct file_lock **flp)
> {
> - struct file_lock *fl = locks_alloc_lock(1);
> + struct file_lock *fl = locks_alloc_lock();
> if (fl == NULL)
> return -ENOMEM;
>
> @@ -712,7 +705,7 @@
> size_t count)
> {
> struct file_lock *fl;
> - struct file_lock *new_fl = locks_alloc_lock(0);
> + struct file_lock *new_fl = locks_alloc_lock();
> int error;
>
> if (new_fl == NULL)
> @@ -872,8 +865,8 @@
> * We may need two file_lock structures for this
> operation,
> * so we get them in advance to avoid races.
> */
> - new_fl = locks_alloc_lock(0);
> - new_fl2 = locks_alloc_lock(0);
> + new_fl = locks_alloc_lock();
> + new_fl2 = locks_alloc_lock();
> error = -ENOLCK; /* "no luck" */
> if (!(new_fl && new_fl2))
> goto out_nolock;
> @@ -1426,7 +1419,7 @@
> int fcntl_setlk(unsigned int fd, unsigned int cmd,
> struct flock *l)
> {
> struct file *filp;
> - struct file_lock *file_lock = locks_alloc_lock(0);
> + struct file_lock *file_lock = locks_alloc_lock();
> struct flock flock;
> struct inode *inode;
> int error;
> @@ -1582,7 +1575,7 @@
> int fcntl_setlk64(unsigned int fd, unsigned int
> cmd, struct flock64 *l)
> {
> struct file *filp;
> - struct file_lock *file_lock = locks_alloc_lock(0);
> + struct file_lock *file_lock = locks_alloc_lock();
> struct flock64 flock;
> struct inode *inode;
> int error;
>
> --
> Revolutions do not require corporate support.
__________________________________________________
Do You Yahoo!?
Yahoo! Finance - Get real-time stock quotes
http://finance.yahoo.com
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/