31 Oct, 2008

1 commit


30 Oct, 2008

1 commit


29 Oct, 2008

1 commit


24 Oct, 2008

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6:
    cifs: handle the TCP_Server_Info->tsk field more carefully
    cifs: fix unlinking of rename target when server doesn't support open file renames
    [CIFS] improve setlease handling
    [CIFS] fix saving of resume key before CIFSFindNext
    cifs: make cifs_rename handle -EACCES errors
    [CIFS] fix build error
    [CIFS] undo changes in cifs_rename_pending_delete if it errors out
    cifs: track DeletePending flag in cifsInodeInfo
    cifs: don't use CREATE_DELETE_ON_CLOSE in cifs_rename_pending_delete
    [CIFS] eliminate usage of kthread_stop for cifsd
    [CIFS] Add nodfs mount option

    Linus Torvalds
     

23 Oct, 2008

5 commits

  • For execute permission on a regular files we need to check if file has
    any execute bits at all, regardless of capabilites.

    This check is normally performed by generic_permission() but was also
    added to the case when the filesystem defines its own ->permission()
    method. In the latter case the filesystem should be responsible for
    performing this check.

    Move the check from inode_permission() inside filesystems which are
    not calling generic_permission().

    Create a helper function execute_ok() that returns true if the inode
    is a directory or if any execute bits are present in i_mode.

    Also fix up the following code:

    - coda control file is never executable
    - sysctl files are never executable
    - hfs_permission seems broken on MAY_EXEC, remove
    - hfsplus_permission is eqivalent to generic_permission(), remove

    Signed-off-by: Miklos Szeredi

    Miklos Szeredi
     
  • With this patch all directory fops instances that have a readdir
    that doesn't take the BKL are switched to generic_file_llseek.

    Signed-off-by: Christoph Hellwig

    Christoph Hellwig
     
  • cifs: handle the TCP_Server_Info->tsk field more carefully

    We currently handle the TCP_Server_Info->tsk field without any locking,
    but with some half-measures to try and prevent races. These aren't
    really sufficient though. When taking down cifsd, use xchg() to swap
    the contents of the tsk field with NULL so we don't end up trying
    to send it more than one signal. Also, don't allow cifsd to exit until
    the signal is received if we expect one.

    Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Jeff Layton
     
  • cifs: fix unlinking of rename target when server doesn't support open file renames

    The patch to make cifs_rename undoable broke renaming one file on top of
    another when the server doesn't support busy file renames. Remove the
    code that uses busy file renames to unlink the target file, and just
    have it call cifs_unlink. If the rename of the source file fails, then
    the unlink won't be undoable, but hopefully that's rare enough that it
    won't be a problem.

    Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Jeff Layton
     
  • fcntl(F_SETLEASE) currently is not exported by cifs (nor by local file
    systems) so cifs grants leases based on how other local processes have
    opened the file not by whether the file is cacheable (oplocked). This
    adds the check to make sure that the file is cacheable on the client
    before checking whether we can grant the lease locally
    (generic_setlease). It also adds a mount option for cifs (locallease)
    if the user wants to override this and try to grant leases even
    if the server did not grant oplock.

    Signed-off-by: Steve French

    Steve French
     

21 Oct, 2008

3 commits

  • We recently fixed the cifs readdir code so that it saves the resume key
    before calling CIFSFindNext. Unfortunately, this assumes that we have
    just done a CIFSFindFirst (or FindNext) and have resume info to save.
    This isn't necessarily the case. Fix the code to save resume info if we
    had to reinitiate the search, and after a FindNext.

    This fixes connectathon basic test6 against NetApp filers.

    Signed-off-by: Jeff Layton
    CC: Stable
    Signed-off-by: Steve French

    Jeff Layton
     
  • cifs: make cifs_rename handle -EACCES errors

    Some servers seem to return -EACCES when attempting to rename one
    open file on top of another. Refactor the cifs_rename logic to
    attempt to rename the target file out of the way in this situation.

    This also fixes the "unlink_target" logic to be undoable if the
    subsequent rename fails.

    Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Jeff Layton
     
  • Signed-off-by: Steve French

    Steve French
     

20 Oct, 2008

4 commits

  • Signed-off-by: Alexey Dobriyan
    Cc: Steven French
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alexey Dobriyan
     
  • Split the LRU lists in two, one set for pages that are backed by real file
    systems ("file") and one for pages that are backed by memory and swap
    ("anon"). The latter includes tmpfs.

    The advantage of doing this is that the VM will not have to scan over lots
    of anonymous pages (which we generally do not want to swap out), just to
    find the page cache pages that it should evict.

    This patch has the infrastructure and a basic policy to balance how much
    we scan the anon lists and how much we scan the file lists. The big
    policy changes are in separate patches.

    [lee.schermerhorn@hp.com: collect lru meminfo statistics from correct offset]
    [kosaki.motohiro@jp.fujitsu.com: prevent incorrect oom under split_lru]
    [kosaki.motohiro@jp.fujitsu.com: fix pagevec_move_tail() doesn't treat unevictable page]
    [hugh@veritas.com: memcg swapbacked pages active]
    [hugh@veritas.com: splitlru: BDI_CAP_SWAP_BACKED]
    [akpm@linux-foundation.org: fix /proc/vmstat units]
    [nishimura@mxp.nes.nec.co.jp: memcg: fix handling of shmem migration]
    [kosaki.motohiro@jp.fujitsu.com: adjust Quicklists field of /proc/meminfo]
    [kosaki.motohiro@jp.fujitsu.com: fix style issue of get_scan_ratio()]
    Signed-off-by: Rik van Riel
    Signed-off-by: Lee Schermerhorn
    Signed-off-by: KOSAKI Motohiro
    Signed-off-by: Hugh Dickins
    Signed-off-by: Daisuke Nishimura
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rik van Riel
     
  • The cifs_rename_pending_delete process involves multiple steps. If it
    fails and we're going to return error, we don't want to leave things in
    a half-finished state. Add code to the function to undo changes if
    a call fails.

    Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Steve French
     
  • cifs: track DeletePending flag in cifsInodeInfo

    The QPathInfo call returns a flag that indicates whether DELETE_ON_CLOSE
    is set. Track it in the cifsInodeInfo.

    Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Jeff Layton
     

17 Oct, 2008

3 commits

  • cifs: don't use CREATE_DELETE_ON_CLOSE in cifs_rename_pending_delete

    CREATE_DELETE_ON_CLOSE apparently has different semantics than when you
    set the DELETE_ON_CLOSE bit after opening the file. Setting it in the
    open says "delete this file as soon as this filehandle is closed". That's
    not what we want for cifs_rename_pending_delete.

    Don't set this bit in the CreateFlags. Experimentation shows that
    setting this flag in the SET_FILE_INFO call has no effect.

    Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Jeff Layton
     
  • When cifs_demultiplex_thread was converted to a kthread based kernel
    thread, great pains were taken to make it so that kthread_stop would be
    used to bring it down. This just added unnecessary complexity since we
    needed to use a signal anyway to break out of kernel_recvmsg.

    Also, cifs_demultiplex_thread does a bit of cleanup as it's exiting, and
    we need to be certain that this gets done. It's possible for a kthread
    to exit before its main function is ever run if kthread_stop is called
    soon after its creation. While I'm not sure that this is a real problem
    with cifsd now, it could be at some point in the future if cifs_mount is
    ever changed to bring down the thread quickly.

    The upshot here is that using kthread_stop to bring down the thread just
    adds extra complexity with no real benefit. This patch changes the code
    to use the original method to bring down the thread, but still leaves it
    so that the thread is actually started with kthread_run.

    This seems to fix the deadlock caused by the reproducer in this bug
    report:

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

    Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Jeff Layton
     
  • Older samba server (eg. 3.0.24 from Debian etch) don't work correctly,
    if DFS paths are used. Such server claim that they support DFS, but fail
    to process some requests with DFS paths. Starting with Linux 2.6.26,
    the cifs clients starts sending DFS paths in such situations, rendering
    it unuseable with older samba servers.

    The nodfs mount options forces a share to be used with non DFS paths,
    even if the server claims, that it supports it.

    Signed-off-by: Martin Koegler
    Acked-by: Jeff Layton
    Acked-by: Igor Mammedov
    Signed-off-by: Steve French

    Steve French
     

12 Oct, 2008

1 commit


09 Oct, 2008

1 commit


08 Oct, 2008

2 commits

  • When we do a seekdir() or equivalent, we usually end up doing a
    FindFirst call and then call FindNext until we get to the offset that we
    want. The problem is that when we call FindNext, the code usually
    doesn't have the proper info (mostly, the filename of the entry from the
    last search) to resume the search.

    Add a "last_entry" field to the cifs_search_info that points to the last
    entry in the search. We calculate this pointer by using the
    LastNameOffset field from the search parms that are returned. We then
    use that info to do a cifs_save_resume_key before we call CIFSFindNext.

    This patch allows CIFS to reliably pass the "telldir" connectathon test.

    Signed-off-by: Jeff Layton
    CC: Stable
    Signed-off-by: Steve French

    Steve French
     
  • Currently, if a standard delete fails and we end up getting -EACCES
    we try to clear ATTR_READONLY and try the delete again. If that
    then fails with -ETXTBSY then we try a rename_pending_delete. We
    aren't handling other errors appropriately though.

    Another client could have deleted the file in the meantime and
    we get back -ENOENT, for instance. In that case we wouldn't do a
    d_drop. Instead of retrying in a separate call, simply goto the
    original call and use the error handling from that.

    Also, we weren't properly undoing any attribute changes that
    were done before returning an error back to the caller.

    CC: Jeff Layton
    Signed-off-by: Steve French

    Steve French
     

07 Oct, 2008

1 commit


25 Sep, 2008

6 commits

  • cifs: explicitly revoke SPNEGO key after session setup

    The SPNEGO blob returned by an upcall can only be used once. Explicitly
    revoke it to make sure that we never pick it up again after session
    setup exits.

    This doesn't seem to be that big an issue on more recent kernels, but
    older kernels seem to link keys into the session keyring by default.
    That said, explicitly revoking the key seems like a reasonable thing
    to do here.

    Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Jeff Layton
     
  • cifs: Convert cifs to new aops.

    This patch is based on the one originally posted by Nick Piggin. His
    patch was very close, but had a couple of small bugs. Nick's original
    comments follow:

    This is another relatively naive conversion. Always do the read upfront
    when the page is not uptodate (unless we're in the writethrough path).

    Fix an uninitialized data exposure where SetPageUptodate was called
    before the page was uptodate.

    SetPageUptodate and switch to writeback mode in the case that the full
    page was dirtied.

    Acked-by: Shaggy
    Acked-by: Badari Pulavarty
    Signed-off-by: Nick Piggin
    Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Nick Piggin
     
  • Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Steve French
     
  • cifs: remove NULL termination from rename target in CIFSSMBRenameOpenFIle

    The rename destination isn't supposed to be null terminated. Also,
    change the name string arg to be const.

    Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Jeff Layton
     
  • cifs: work around samba returning -ENOENT on SetFileDisposition call

    Samba seems to return STATUS_OBJECT_NAME_NOT_FOUND when we try to set
    the delete on close bit after doing a rename by filehandle. This looks
    like a samba bug to me, but a lot of servers will do this. For now,
    pretend an -ENOENT return is a success.

    Samba does however seem to respect the CREATE_DELETE_ON_CLOSE bit
    when opening files that already exist. Windows will ignore it, but
    so adding it to the open flags should be harmless.

    We're also currently ignoring the return code on the rename by
    filehandle, so no need to set rc based on it.

    Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Jeff Layton
     
  • cifs: fix inverted NULL check after kmalloc

    Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Jeff Layton
     

24 Sep, 2008

5 commits

  • We're given the datalen in the downcall, so there's no need to do any
    calls to strlen(). Just keep track of the datalen in the key. Finally,
    add a sanity check of the data in the downcall to make sure that it
    looks like a real IP address.

    Signed-off-by: Jeff Layton
    Acked-by: David Howells
    Signed-off-by: Steve French

    Steve French
     
  • Break out the code that does the actual renaming into a separate
    function and have cifs_rename call that. That function will attempt a
    path based rename first and then do a filehandle based one if it looks
    like the source is busy.

    The existing logic tried a path based rename first, but if we needed to
    remove the destination then it only attempted a filehandle based rename
    afterward. Not all servers support renaming by filehandle, so we need to
    always attempt path rename first and fall back to filehandle rename if
    it doesn't work.

    This also fixes renames of open files on windows servers (at least when
    the source and destination directories are the same).

    CC: Jeff Layton
    Signed-off-by: Steve French

    Steve French
     
  • cifs: add function to set file disposition

    The proper way to set the delete on close bit on an already existing
    file is to use SET_FILE_INFO with an infolevel of
    SMB_FILE_DISPOSITION_INFO. Add a function to do that and have the
    silly-rename code use it.

    Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Jeff Layton
     
  • Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Steve French
     
  • cifs: move rename and delete-on-close logic into helper function

    When a file is still open on the server, we attempt to set the
    DELETE_ON_CLOSE bit and rename it to a new filename. When the
    last opener closes the file, the server should delete it.

    This patch moves this mechanism into a helper function and has
    the two places in cifs_unlink that do this procedure call it. It
    also fixes the open flags to be correct.

    Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Jeff Layton
     

23 Sep, 2008

2 commits

  • When the CIFS client goes to write out pages, it needs to pick a
    filehandle to write to. find_writeable_file however just picks the
    first filehandle that it finds. This can cause problems when a lock
    is issued against a particular filehandle and we pick a different
    filehandle to write to.

    This patch tries to avert this situation by having find_writable_file
    prefer filehandles that have a pid that matches the current task.
    This seems to fix lock test 11 from the connectathon test suite when
    run against a windows server.

    Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Jeff Layton
     
  • GFP_KERNEL and GFP_NOFS are mutually exclusive. If you combine them, you end up
    with plain GFP_KERNEL which can deadlock in cases where you really want
    GFP_NOFS.

    Cc: Steve French
    Signed-off-by: Pekka Enberg
    Signed-off-by: Steve French

    Pekka Enberg
     

17 Sep, 2008

2 commits

  • We already have a cifs_set_file_info function that can flip DOS
    attribute bits. Have cifs_unlink call it to handle turning ATTR_HIDDEN
    on and ATTR_READONLY off when an unlink attempt returns -EACCES.

    This also removes a level of indentation from cifs_unlink.

    Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Steve French
     
  • Change parameters to cifs_unlink to match the ones used in the generic
    VFS. Add some local variables to cut down on the amount of struct
    dereferencing that needs to be done, and eliminate some unneeded NULL
    pointer checks on the parent directory inode. Finally, rename pTcon
    to "tcon" to more closely match standard kernel coding style.

    Signed-off-by: Jeff Layton
    Signed-off-by: Steve French

    Jeff Layton
     

28 Aug, 2008

1 commit