On Sat, 17 Mar 2012 09:46:55 +0300 Pavel Shilovsky <piastry@xxxxxxxxxxx> wrote: > Signed-off-by: Pavel Shilovsky <piastry@xxxxxxxxxxx> > --- > 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 4aa6080..159fcc5 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) { Nit: a clearer way to do this would be to list_del the locks as you use them, and then check for list_empty(&locks_to_send). This works too, but is not as self documenting. It's not a big deal though... > - /* 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(); Reviewed-by: Jeff Layton <jlayton@xxxxxxxxxx> ...you might also want to add: Reported-by: Ben Hutchings <ben@xxxxxxxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe linux-cifs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html