Commit ce85852b authored by Pavel Shilovsky's avatar Pavel Shilovsky Committed by Steve French
Browse files

CIFS: Fix a spurious error in cifs_push_posix_locks

parent c16fa4f2
Loading
Loading
Loading
Loading
+10 −9
Original line number Diff line number Diff line
@@ -960,9 +960,9 @@ cifs_push_posix_locks(struct cifsFileInfo *cfile)
	INIT_LIST_HEAD(&locks_to_send);

	/*
	 * Allocating count locks is enough because no locks can be added to
	 * the list while we are holding cinode->lock_mutex that protects
	 * locking operations of this inode.
	 * Allocating count locks is enough because no FL_POSIX locks can be
	 * added to the list while we are holding cinode->lock_mutex that
	 * protects locking operations of this inode.
	 */
	for (; i < count; i++) {
		lck = kmalloc(sizeof(struct lock_to_push), GFP_KERNEL);
@@ -973,18 +973,20 @@ cifs_push_posix_locks(struct cifsFileInfo *cfile)
		list_add_tail(&lck->llist, &locks_to_send);
	}

	i = 0;
	el = locks_to_send.next;
	lock_flocks();
	cifs_for_each_lock(cfile->dentry->d_inode, before) {
		flock = *before;
		if ((flock->fl_flags & FL_POSIX) == 0)
			continue;
		if (el == &locks_to_send) {
			/* something is really wrong */
			/*
			 * The list ended. We don't have enough allocated
			 * structures - something is really wrong.
			 */
			cERROR(1, "Can't push all brlocks!");
			break;
		}
		flock = *before;
		if ((flock->fl_flags & FL_POSIX) == 0)
			continue;
		length = 1 + flock->fl_end - flock->fl_start;
		if (flock->fl_type == F_RDLCK || flock->fl_type == F_SHLCK)
			type = CIFS_RDLCK;
@@ -996,7 +998,6 @@ cifs_push_posix_locks(struct cifsFileInfo *cfile)
		lck->length = length;
		lck->type = type;
		lck->offset = flock->fl_start;
		i++;
		el = el->next;
	}
	unlock_flocks();