diff --git a/debian/changelog b/debian/changelog index fe5a1c9b0..3d0579aca 100644 --- a/debian/changelog +++ b/debian/changelog @@ -21,6 +21,7 @@ linux-2.6 (3.2.12-1) UNRELEASED; urgency=low needed by modules (fixes FTBFS) * [x86] Disable POHMELFS; this version is obsolete * epoll: Don't limit non-nested epoll paths + * CIFS: Fix a spurious error in cifs_push_posix_locks [ Jonathan Nieder ] * [x86] Enable RTS5139 as module (Closes: #663912) diff --git a/debian/patches/bugfix/all/CIFS-Fix-a-spurious-error-in-cifs_push_posix_locks.patch b/debian/patches/bugfix/all/CIFS-Fix-a-spurious-error-in-cifs_push_posix_locks.patch new file mode 100644 index 000000000..3ecd46809 --- /dev/null +++ b/debian/patches/bugfix/all/CIFS-Fix-a-spurious-error-in-cifs_push_posix_locks.patch @@ -0,0 +1,67 @@ +From ce85852b90a214cf577fc1b4f49d99fd7e98784a Mon Sep 17 00:00:00 2001 +From: Pavel Shilovsky +Date: Sat, 17 Mar 2012 09:46:55 +0300 +Subject: [PATCH] CIFS: Fix a spurious error in cifs_push_posix_locks + +Signed-off-by: Pavel Shilovsky +Reviewed-by: Jeff Layton +Reported-by: Ben Hutchings +Signed-off-by: Steve French +--- + fs/cifs/file.c | 19 ++++++++++--------- + 1 files changed, 10 insertions(+), 9 deletions(-) + +diff --git a/fs/cifs/file.c b/fs/cifs/file.c +index 5e64748..8e02dbd 100644 +--- a/fs/cifs/file.c ++++ b/fs/cifs/file.c +@@ -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(); +-- +1.7.0.4 + diff --git a/debian/patches/series/base b/debian/patches/series/base index d136c153a..3d710c62a 100644 --- a/debian/patches/series/base +++ b/debian/patches/series/base @@ -82,3 +82,4 @@ + features/all/fs-hardlink-creation-restrictions-fix.patch + features/all/fs-hardlink-creation-restriction-cleanup.patch + bugfix/all/Don-t-limit-non-nested-epoll-paths.patch ++ bugfix/all/CIFS-Fix-a-spurious-error-in-cifs_push_posix_locks.patch