1. 26 12月, 2008 11 次提交
  2. 18 11月, 2008 1 次提交
  3. 17 11月, 2008 1 次提交
  4. 15 11月, 2008 3 次提交
  5. 14 11月, 2008 2 次提交
    • S
      [CIFS] clean up server protocol handling · 3ec332ef
      Steve French 提交于
      We're currently declaring both a sockaddr_in and sockaddr6_in on the
      stack, but we really only need storage for one of them. Declare a
      sockaddr struct and cast it to the proper type. Also, eliminate the
      protocolType field in the TCP_Server_Info struct. It's redundant since
      we have a sa_family field in the sockaddr anyway.
      
      We may need to revisit this if SCTP is ever implemented, but for now
      this will simplify the code.
      
      CIFS over IPv6 also has a number of problems currently. This fixes all
      of them that I found. Eventually, it would be nice to move more of the
      code to be protocol independent, but this is a start.
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      3ec332ef
    • S
      [CIFS] Fix cifs reconnection flags · 3b795210
      Steve French 提交于
      In preparation for Jeff's big umount/mount fixes to remove the possibility of
      various races in cifs mount and linked list handling of sessions, sockets and
      tree connections, this patch cleans up some repetitive code in cifs_mount,
      and addresses a problem with ses->status and tcon->tidStatus in which we
      were overloading the "need_reconnect" state with other status in that
      field.  So the "need_reconnect" flag has been broken out from those
      two state fields (need reconnect was not mutually exclusive from some of the
      other possible tid and ses states).  In addition, a few exit cases in
      cifs_mount were cleaned up, and a problem with a tcon flag (for lease support)
      was not being set consistently for the 2nd mount of the same share
      
      CC: Jeff Layton <jlayton@redhat.com>
      CC: Shirish Pargaonkar <shirishp@us.ibm.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      3b795210
  6. 04 11月, 2008 1 次提交
  7. 29 10月, 2008 1 次提交
    • S
      [CIFS] Reduce number of socket retries in large write path · edf1ae40
      Steve French 提交于
      CIFS in some heavy stress conditions cifs could get EAGAIN
      repeatedly in smb_send2 which led to repeated retries and eventually
      failure of large writes which could lead to data corruption.
      
      There are three changes that were suggested by various network
      developers:
      
      1) convert cifs from non-blocking to blocking tcp sendmsg
      (we left in the retry on failure)
      2) change cifs to not set sendbuf and rcvbuf size for the socket
      (let tcp autotune the buffer sizes since that works much better
      in the TCP stack now)
      3) if we have a partial frame sent in smb_send2, mark the tcp
      session as invalid (close the socket and reconnect) so we do
      not corrupt the remaining part of the SMB with the beginning
      of the next SMB.
      
      This does not appear to hurt performance measurably and has
      been run in various scenarios, but it definately removes
      a corruption that we were seeing in some high stress
      test cases.
      Acked-by: NShirish Pargaonkar <shirishp@us.ibm.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      edf1ae40
  8. 23 10月, 2008 2 次提交
    • J
      cifs: handle the TCP_Server_Info->tsk field more carefully · b1c8d2b4
      Jeff Layton 提交于
      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: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      b1c8d2b4
    • S
      [CIFS] improve setlease handling · 84210e91
      Steve French 提交于
      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: NSteve French <sfrench@us.ibm.com>
      84210e91
  9. 17 10月, 2008 2 次提交
    • J
      [CIFS] eliminate usage of kthread_stop for cifsd · 469ee614
      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=5720Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      469ee614
    • S
      [CIFS] Add nodfs mount option · 2c1b8615
      Steve French 提交于
      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: NMartin Koegler <mkoegler@auto.tuwien.ac.at>
      Acked-by: NJeff Layton <jlayton@redhat.com>
      Acked-by: NIgor Mammedov <niallain@gmail.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      2c1b8615
  10. 20 8月, 2008 1 次提交
  11. 09 8月, 2008 1 次提交
  12. 06 8月, 2008 1 次提交
  13. 04 8月, 2008 1 次提交
  14. 24 7月, 2008 2 次提交
    • H
      cifs: assorted endian annotations · 5ca33c6a
      Harvey Harrison 提交于
      fs/cifs/cifssmb.c:3917:13: warning: incorrect type in assignment (different base types)
      fs/cifs/cifssmb.c:3917:13:    expected bool [unsigned] [usertype] is_unicode
      fs/cifs/cifssmb.c:3917:13:    got restricted __le16
      
      The comment explains why __force is used here.
      fs/cifs/connect.c:458:16: warning: cast to restricted __be32
      fs/cifs/connect.c:458:16: warning: cast to restricted __be32
      fs/cifs/connect.c:458:16: warning: cast to restricted __be32
      fs/cifs/connect.c:458:16: warning: cast to restricted __be32
      fs/cifs/connect.c:458:16: warning: cast to restricted __be32
      fs/cifs/connect.c:458:16: warning: cast to restricted __be32
      Signed-off-by: NHarvey Harrison <harvey.harrison@gmail.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      5ca33c6a
    • J
      lockdep: annotate cifs in-kernel sockets · 09e50d55
      Jeff Layton 提交于
      Put CIFS sockets in their own class to avoid some lockdep warnings. CIFS
      sockets are not exposed to user-space, and so are not subject to the
      same deadlock scenarios.
      
      A similar change was made a couple of years ago for RPC sockets in commit
      ed07536e.
      
      This patch should prevent lockdep false-positives like this one:
      
      =======================================================
      [ INFO: possible circular locking dependency detected ]
      2.6.18-98.el5.jtltest.38.bz456320.1debug #1
      -------------------------------------------------------
      test5/2483 is trying to acquire lock:
       (sk_lock-AF_INET){--..}, at: [<ffffffff800270d2>] tcp_sendmsg+0x1c/0xb2f
      
      but task is already holding lock:
       (&inode->i_alloc_sem){--..}, at: [<ffffffff8002e454>] notify_change+0xf5/0x2e0
      
      which lock already depends on the new lock.
      
      the existing dependency chain (in reverse order) is:
      
      -> #3 (&inode->i_alloc_sem){--..}:
             [<ffffffff800a817c>] __lock_acquire+0x9a9/0xadf
             [<ffffffff800a8a72>] lock_acquire+0x55/0x70
             [<ffffffff8002e454>] notify_change+0xf5/0x2e0
             [<ffffffff800a4e36>] down_write+0x3c/0x68
             [<ffffffff8002e454>] notify_change+0xf5/0x2e0
             [<ffffffff800e358d>] do_truncate+0x50/0x6b
             [<ffffffff8005197c>] get_write_access+0x40/0x46
             [<ffffffff80012cf1>] may_open+0x1d3/0x22e
             [<ffffffff8001bc81>] open_namei+0x2c6/0x6dd
             [<ffffffff800289c6>] do_filp_open+0x1c/0x38
             [<ffffffff800683ef>] _spin_unlock+0x17/0x20
             [<ffffffff800167a7>] get_unused_fd+0xf9/0x107
             [<ffffffff8001a704>] do_sys_open+0x44/0xbe
             [<ffffffff80060116>] system_call+0x7e/0x83
             [<ffffffffffffffff>] 0xffffffffffffffff
      
      -> #2 (&sysfs_inode_imutex_key){--..}:
             [<ffffffff800a817c>] __lock_acquire+0x9a9/0xadf
             [<ffffffff8010f6df>] create_dir+0x26/0x1d7
             [<ffffffff800a8a72>] lock_acquire+0x55/0x70
             [<ffffffff8010f6df>] create_dir+0x26/0x1d7
             [<ffffffff800671c0>] mutex_lock_nested+0x104/0x29c
             [<ffffffff800a819d>] __lock_acquire+0x9ca/0xadf
             [<ffffffff8010f6df>] create_dir+0x26/0x1d7
             [<ffffffff8010fc67>] sysfs_create_dir+0x58/0x76
             [<ffffffff8015144c>] kobject_add+0xdb/0x198
             [<ffffffff801be765>] class_device_add+0xb2/0x465
             [<ffffffff8005a6ff>] kobject_get+0x12/0x17
             [<ffffffff80225265>] register_netdevice+0x270/0x33e
             [<ffffffff8022538c>] register_netdev+0x59/0x67
             [<ffffffff80464d40>] net_olddevs_init+0xb/0xac
             [<ffffffff80448a79>] init+0x1f9/0x2fc
             [<ffffffff80068885>] _spin_unlock_irq+0x24/0x27
             [<ffffffff80067f86>] trace_hardirqs_on_thunk+0x35/0x37
             [<ffffffff80061079>] child_rip+0xa/0x11
             [<ffffffff80068885>] _spin_unlock_irq+0x24/0x27
             [<ffffffff800606a8>] restore_args+0x0/0x30
             [<ffffffff80179a59>] acpi_ds_init_one_object+0x0/0x80
             [<ffffffff80448880>] init+0x0/0x2fc
             [<ffffffff8006106f>] child_rip+0x0/0x11
             [<ffffffffffffffff>] 0xffffffffffffffff
      
      -> #1 (rtnl_mutex){--..}:
             [<ffffffff800a817c>] __lock_acquire+0x9a9/0xadf
             [<ffffffff8025acf8>] ip_mc_leave_group+0x23/0xb7
             [<ffffffff800a8a72>] lock_acquire+0x55/0x70
             [<ffffffff8025acf8>] ip_mc_leave_group+0x23/0xb7
             [<ffffffff800671c0>] mutex_lock_nested+0x104/0x29c
             [<ffffffff8025acf8>] ip_mc_leave_group+0x23/0xb7
             [<ffffffff802451b0>] do_ip_setsockopt+0x6d1/0x9bf
             [<ffffffff800a575e>] lock_release_holdtime+0x27/0x48
             [<ffffffff800a575e>] lock_release_holdtime+0x27/0x48
             [<ffffffff8006a85e>] do_page_fault+0x503/0x835
             [<ffffffff8012cbf6>] socket_has_perm+0x5b/0x68
             [<ffffffff80245556>] ip_setsockopt+0x22/0x78
             [<ffffffff8021c973>] sys_setsockopt+0x91/0xb7
             [<ffffffff800602a6>] tracesys+0xd5/0xdf
             [<ffffffffffffffff>] 0xffffffffffffffff
      
      -> #0 (sk_lock-AF_INET){--..}:
             [<ffffffff800a5037>] print_stack_trace+0x59/0x68
             [<ffffffff800a8092>] __lock_acquire+0x8bf/0xadf
             [<ffffffff800a8a72>] lock_acquire+0x55/0x70
             [<ffffffff800270d2>] tcp_sendmsg+0x1c/0xb2f
             [<ffffffff80035466>] lock_sock+0xd4/0xe4
             [<ffffffff80096e91>] _local_bh_enable+0xcb/0xe0
             [<ffffffff800606a8>] restore_args+0x0/0x30
             [<ffffffff800270d2>] tcp_sendmsg+0x1c/0xb2f
             [<ffffffff80057540>] sock_sendmsg+0xf3/0x110
             [<ffffffff800a2bb6>] autoremove_wake_function+0x0/0x2e
             [<ffffffff800a10e4>] kernel_text_address+0x1a/0x26
             [<ffffffff8006f4e2>] dump_trace+0x211/0x23a
             [<ffffffff800a6d3d>] find_usage_backwards+0x5f/0x88
             [<ffffffff8840221a>] MD5Final+0xaf/0xc2 [cifs]
             [<ffffffff884032ec>] cifs_calculate_signature+0x55/0x69 [cifs]
             [<ffffffff8021d891>] kernel_sendmsg+0x35/0x47
             [<ffffffff883ff38e>] smb_send+0xa3/0x151 [cifs]
             [<ffffffff883ff5de>] SendReceive+0x1a2/0x448 [cifs]
             [<ffffffff800a812f>] __lock_acquire+0x95c/0xadf
             [<ffffffff883e758a>] CIFSSMBSetEOF+0x20d/0x25b [cifs]
             [<ffffffff883fa430>] cifs_set_file_size+0x110/0x3b7 [cifs]
             [<ffffffff883faa89>] cifs_setattr+0x3b2/0x6f6 [cifs]
             [<ffffffff8002e454>] notify_change+0xf5/0x2e0
             [<ffffffff8002e4a4>] notify_change+0x145/0x2e0
             [<ffffffff800e358d>] do_truncate+0x50/0x6b
             [<ffffffff8005197c>] get_write_access+0x40/0x46
             [<ffffffff80012cf1>] may_open+0x1d3/0x22e
             [<ffffffff8001bc81>] open_namei+0x2c6/0x6dd
             [<ffffffff800289c6>] do_filp_open+0x1c/0x38
             [<ffffffff800683ef>] _spin_unlock+0x17/0x20
             [<ffffffff800167a7>] get_unused_fd+0xf9/0x107
             [<ffffffff8001a704>] do_sys_open+0x44/0xbe
             [<ffffffff800602a6>] tracesys+0xd5/0xdf
             [<ffffffffffffffff>] 0xffffffffffffffff
      
      other info that might help us debug this:
      
      2 locks held by test5/2483:
       #0:  (&inode->i_mutex){--..}, at: [<ffffffff800e3582>] do_truncate+0x45/0x6b
       #1:  (&inode->i_alloc_sem){--..}, at: [<ffffffff8002e454>] notify_change+0xf5/0x2e0
      
      stack backtrace:
      
      Call Trace:
       [<ffffffff800a6a7b>] print_circular_bug_tail+0x65/0x6e
       [<ffffffff800a5037>] print_stack_trace+0x59/0x68
       [<ffffffff800a8092>] __lock_acquire+0x8bf/0xadf
       [<ffffffff800a8a72>] lock_acquire+0x55/0x70
       [<ffffffff800270d2>] tcp_sendmsg+0x1c/0xb2f
       [<ffffffff80035466>] lock_sock+0xd4/0xe4
       [<ffffffff80096e91>] _local_bh_enable+0xcb/0xe0
       [<ffffffff800606a8>] restore_args+0x0/0x30
       [<ffffffff800270d2>] tcp_sendmsg+0x1c/0xb2f
       [<ffffffff80057540>] sock_sendmsg+0xf3/0x110
       [<ffffffff800a2bb6>] autoremove_wake_function+0x0/0x2e
       [<ffffffff800a10e4>] kernel_text_address+0x1a/0x26
       [<ffffffff8006f4e2>] dump_trace+0x211/0x23a
       [<ffffffff800a6d3d>] find_usage_backwards+0x5f/0x88
       [<ffffffff8840221a>] :cifs:MD5Final+0xaf/0xc2
       [<ffffffff884032ec>] :cifs:cifs_calculate_signature+0x55/0x69
       [<ffffffff8021d891>] kernel_sendmsg+0x35/0x47
       [<ffffffff883ff38e>] :cifs:smb_send+0xa3/0x151
       [<ffffffff883ff5de>] :cifs:SendReceive+0x1a2/0x448
       [<ffffffff800a812f>] __lock_acquire+0x95c/0xadf
       [<ffffffff883e758a>] :cifs:CIFSSMBSetEOF+0x20d/0x25b
       [<ffffffff883fa430>] :cifs:cifs_set_file_size+0x110/0x3b7
       [<ffffffff883faa89>] :cifs:cifs_setattr+0x3b2/0x6f6
       [<ffffffff8002e454>] notify_change+0xf5/0x2e0
       [<ffffffff8002e4a4>] notify_change+0x145/0x2e0
       [<ffffffff800e358d>] do_truncate+0x50/0x6b
       [<ffffffff8005197c>] get_write_access+0x40/0x46
       [<ffffffff80012cf1>] may_open+0x1d3/0x22e
       [<ffffffff8001bc81>] open_namei+0x2c6/0x6dd
       [<ffffffff800289c6>] do_filp_open+0x1c/0x38
       [<ffffffff800683ef>] _spin_unlock+0x17/0x20
       [<ffffffff800167a7>] get_unused_fd+0xf9/0x107
       [<ffffffff8001a704>] do_sys_open+0x44/0xbe
       [<ffffffff800602a6>] tracesys+0xd5/0xdf
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Acked-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      09e50d55
  15. 11 6月, 2008 1 次提交
  16. 24 5月, 2008 1 次提交
  17. 16 5月, 2008 1 次提交
  18. 15 5月, 2008 2 次提交
  19. 13 5月, 2008 2 次提交
    • S
      [CIFS] cleanup old checkpatch warnings · 582d21e5
      Steve French 提交于
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      582d21e5
    • J
      [CIFS] CIFS currently allows for permissions to be changed on files, even · d0a9c078
      Jeff Layton 提交于
      when unix extensions and cifsacl support are disabled. These
      permissions changes are "ephemeral" however. They are lost whenever
      a share is mounted and unmounted, or when memory pressure forces
      the inode out of the cache.
      
      Because of this, we'd like to introduce a behavior change to make
      CIFS behave more like local DOS/Windows filesystems. When unix
      extensions and cifsacl support aren't enabled, then don't silently
      ignore changes to permission bits that can't be reflected on the
      server.
      
      Still, there may be people relying on the current behavior for
      certain applications. This patch adds a new "dynperm" (and a
      corresponding "nodynperm") mount option that will be intended
      to make the client fall back to legacy behavior when setting
      these modes.
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      d0a9c078
  20. 12 5月, 2008 3 次提交
    • S
      [CIFS] don't allow demultiplex thread to exit until kthread_stop is called · e691b9d1
      Steve French 提交于
      cifs_demultiplex_thread can exit under several conditions:
      
      1) if it's signaled
      2) if there's a problem with session setup
      3) if kthread_stop is called on it
      
      The first two are problems. If kthread_stop is called on the thread,
      there is no guarantee that it will still be up. We need to have the
      thread stay up until kthread_stop is called on it.
      
      One option would be to not even try to tear things down until after
      kthread_stop is called. However, in the case where there is a problem
      setting up the session, there's no real reason to try continuing the
      loop.
      
      This patch allows the thread to clean up and prepare for exit under all
      three conditions, but it has the thread go to sleep until kthread_stop
      is called. This allows us to simplify the shutdown code somewhat since
      we can be reasonably sure that the thread won't exit after being
      signaled but before kthread_stop is called.
      
      It also removes the places where the thread itself set the tsk variable
      since it appeared that it could have a potential race where the thread
      might never be shut down.
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Acked-by: NChristoph Hellwig <hch@infradead.org>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      e691b9d1
    • J
      [CIFS] add local struct inode pointer to cifs_setattr · 02eadeff
      Jeff Layton 提交于
      Clean up cifs_setattr a bit by adding a local inode pointer, and
      changing all of the direntry->d_inode references to it. This also adds a
      bit of micro-optimization. d_inode shouldn't change over the life of
      this function, so we only need to dereference it once.
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      02eadeff
    • C
      [CIFS] cifs_find_tcp_session cleanup · 1b20d672
      Cyrill Gorcunov 提交于
      This patch cleans up cifs_find_tcp_session so it become
      less indented. Also the error of skipping IPv6 matched
      addresses fixed.
      Signed-off-by: NCyrill Gorcunov <gorcunov@gmail.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      1b20d672