[linux-cifs-client] [PATCH 0/4] cifs: fix "Busy inodes after umount" issues (RFC)

Jeff Layton jlayton at redhat.com
Fri May 21 12:25:13 MDT 2010


We've had a spate of "Busy inodes after umount" problems in recent
kernels. With the help of a reproducer that Suresh provided, I tracked
down the cause of one of these and wrote it up here:

    https://bugzilla.samba.org/show_bug.cgi?id=7433

The main problem is that CIFS opens files during create operations,
puts these files on a list and then expects that a subsequent open
operation will find those on the list and make them full, productive
members of society.

This expectation is wrong however. There's no guarantee that cifs_open
will be called at all after a create. There are several scenarios that
can prevent it from occuring. When this happens, these entries get left
dangling on the list and nothing will ever clean them up. Recent changes
have made it so that cifsFileInfo structs hold an inode reference as
well, which is what actually leads to the busy inodes after umount
problems.

This patch is intended to fix this in the right way. It has the create
operations properly use lookup_instantiate_filp to create an open file
during the operation that does the actual create. With this, there's
no need to have cifs_open scrape these entries off the list.

This fixes the busy inodes problem I was able to reproduce. It's not
very well tested yet however, and I could stand for someone else to
review it and help test it.

Jeff Layton (4):
  cifs: make cifs_lookup return a dentry
  cifs: don't leave open files dangling
  cifs: move cifs_new_fileinfo call out of cifs_posix_open
  cifs: pass instantiated filp back after open call

 fs/cifs/cifsproto.h |    1 -
 fs/cifs/dir.c       |   88 ++++++++++++++++++++++++++++++---------------------
 fs/cifs/file.c      |   59 +++++++--------------------------
 3 files changed, 65 insertions(+), 83 deletions(-)



More information about the linux-cifs-client mailing list