1. 06 8月, 2008 5 次提交
  2. 24 7月, 2008 1 次提交
  3. 13 7月, 2008 1 次提交
  4. 25 5月, 2008 1 次提交
    • J
      disable most mode changes on non-unix/non-cifsacl mounts · 5132861a
      Jeff Layton 提交于
      CIFS currently allows you to change the mode of an inode on a share that
      doesn't have unix extensions enabled, and isn't using cifsacl. The inode
      in this case *only* has its mode changed in memory on the client. This
      is problematic since it can change any time the inode is purged from the
      cache.
      
      This patch makes cifs_setattr silently ignore most mode changes when
      unix extensions and cifsacl support are not enabled, and when the share
      is not mounted with the "dynperm" option. The exceptions are:
      
      When a mode change would remove all write access to an inode we turn on
      the ATTR_READONLY bit on the server and remove all write bits from the
      inode's mode in memory.
      
      When a mode change would add a write bit to an inode that previously had
      them all turned off, it turns off the ATTR_READONLY bit on the server,
      and resets the mode back to what it would normally be (generally, the
      file_mode or dir_mode of the share).
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      5132861a
  5. 24 5月, 2008 4 次提交
    • J
      silently ignore ownership changes unless unix extensions are enabled or we're faking uid changes · 4ca691a8
      Jeff Layton 提交于
      CIFS currently allows you to change the ownership of a file, but unless
      unix extensions are enabled this change is not passed off to the server.
      
      Have CIFS silently ignore ownership changes that can't be persistently
      stored on the server unless the "setuids" option is explicitly
      specified.
      
      We could return an error here (-EOPNOTSUPP or something), but this is
      how most disk-based windows filesystems on behave on Linux (e.g.  VFAT,
      NTFS, etc). With cifsacl support and proper Windows to Unix idmapping
      support, we may be able to do this more properly in the future.
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      4ca691a8
    • S
      [CIFS] remove trailing whitespace · 4e94a105
      Steve French 提交于
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      4e94a105
    • J
      when creating new inodes, use file_mode/dir_mode exclusively on mount without unix extensions · b0fd30d3
      Jeff Layton 提交于
      When CIFS creates a new inode on a mount without unix extensions, it
      temporarily assigns the mode that was passed to it in the create/mkdir
      call. Eventually, when the inode is revalidated, it changes to have the
      file_mode or dir_mode for the mount. This is confusing to users who
      expect that the mode shouldn't change this way. It's also problematic
      since only the mode is treated this way, not the uid or gid. Suppose you
      have a CIFS mount that's mounted with:
      
      uid=0,gid=0,file_mode=0666,dir_mode=0777
      
      ...if an unprivileged user comes along and does this on the mount:
      
      mkdir -m 0700 foo
      touch foo/bar
      
      ...there is a period of time where the touch will fail, since the dir
      will initially be owned by root and have mode 0700. If the user waits
      long enough, then "foo" will be revalidated and will get the correct
      dir_mode permissions.
      
      This patch changes cifs_mkdir and cifs_create to not overwrite the
      mode found by the initial cifs_get_inode_info call after the inode is
      created on the server. Legacy behavior can be reenabled with the
      new "dynperm" mount option.
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      b0fd30d3
    • J
      on non-posix shares, clear write bits in mode when ATTR_READONLY is set · 4468eb3f
      Jeff Layton 提交于
      When mounting a share with posix extensions disabled,
      cifs_get_inode_info turns off all the write bits in the mode for regular
      files if ATTR_READONLY is set. Directories and other inode types,
      however, can also have ATTR_READONLY set, but the mode gives no
      indication of this.
      
      This patch makes this apply to other inode types besides regular files.
      It also cleans up how modes are set in cifs_get_inode_info for both the
      "normal" and "dynperm" cases.
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      4468eb3f
  6. 22 5月, 2008 1 次提交
  7. 21 5月, 2008 3 次提交
  8. 15 5月, 2008 2 次提交
  9. 12 5月, 2008 2 次提交
  10. 03 5月, 2008 1 次提交
  11. 30 4月, 2008 1 次提交
  12. 29 4月, 2008 1 次提交
  13. 19 4月, 2008 1 次提交
    • S
      [CIFS] Fix UNC path prefix on QueryUnixPathInfo to have correct slash · 076d8423
      Steve French 提交于
      When a share was in DFS and the server was Unix/Linux, we were sending paths of the form
          \\server\share/dir/file
      rather than
          //server/share/dir/file
      
      There was some discussion between me and jra over whether we should use
          /server/share/dir/file
      as MS sometimes says - but the documentation for this claims it should be
      doubleslash for this type of UNC-like path format and that works, so leaving
      it as doubleslash but converting the \ to / in the the //server/share portion.
      
      This gets Samba to now correctly return STATUS_PATH_NOT_COVERED when it is
      supposed to (Windows already did since the direction of the slash was not an issue
      for them).  Still need another minor change to fully enable DFS (need to finish
      some chages to SMBGetDFSRefer
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      076d8423
  14. 23 3月, 2008 1 次提交
  15. 15 3月, 2008 2 次提交
    • S
      [CIFS] file create with acl support enabled is slow · 8b1327f6
      Steve French 提交于
      Shirish Pargaonkar noted:
      With cifsacl mount option, when a file is created on the Windows server,
      exclusive oplock is broken right away because the get cifs acl code
      again opens the file to obtain security descriptor.
      The client does not have the newly created file handle or inode in any
      of its lists yet so it does not respond to oplock break and server waits for
      its duration and then responds to the second open. This slows down file
      creation signficantly.  The fix is to pass the file descriptor to the get
      cifsacl code wherever available so that get cifs acl code does not send
      second open (NT Create ANDX) and oplock is not broken.
      
      CC: Shirish Pargaonkar <shirishp@us.ibm.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      8b1327f6
    • S
      [CIFS] Fix mtime on cp -p when file data cached but written out too late · 50531444
      Steve French 提交于
      Kukks noticed that cp -p can write out file data too late, after the timestamp
      is already set.  This was introduced as an unintentional sideeffect of the change
      in an earlier patch (see below) which fixed some delayed return code propagation.
      
      cea21805
      Author: Jeff Layton <jlayton@redhat.com>
      Date:   Tue Nov 20 23:19:03 2007 +0000
      Acked-by: NShirish Pargaonkar <shirishp@us.ibm.com>
      Acked-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      50531444
  16. 12 3月, 2008 1 次提交
  17. 09 3月, 2008 1 次提交
  18. 26 2月, 2008 2 次提交
  19. 16 2月, 2008 1 次提交
  20. 13 2月, 2008 1 次提交
  21. 08 2月, 2008 2 次提交
  22. 06 2月, 2008 1 次提交
    • C
      Pagecache zeroing: zero_user_segment, zero_user_segments and zero_user · eebd2aa3
      Christoph Lameter 提交于
      Simplify page cache zeroing of segments of pages through 3 functions
      
      zero_user_segments(page, start1, end1, start2, end2)
      
              Zeros two segments of the page. It takes the position where to
              start and end the zeroing which avoids length calculations and
      	makes code clearer.
      
      zero_user_segment(page, start, end)
      
              Same for a single segment.
      
      zero_user(page, start, length)
      
              Length variant for the case where we know the length.
      
      We remove the zero_user_page macro. Issues:
      
      1. Its a macro. Inline functions are preferable.
      
      2. The KM_USER0 macro is only defined for HIGHMEM.
      
         Having to treat this special case everywhere makes the
         code needlessly complex. The parameter for zeroing is always
         KM_USER0 except in one single case that we open code.
      
      Avoiding KM_USER0 makes a lot of code not having to be dealing
      with the special casing for HIGHMEM anymore. Dealing with
      kmap is only necessary for HIGHMEM configurations. In those
      configurations we use KM_USER0 like we do for a series of other
      functions defined in highmem.h.
      
      Since KM_USER0 is depends on HIGHMEM the existing zero_user_page
      function could not be a macro. zero_user_* functions introduced
      here can be be inline because that constant is not used when these
      functions are called.
      
      Also extract the flushing of the caches to be outside of the kmap.
      
      [akpm@linux-foundation.org: fix nfs and ntfs build]
      [akpm@linux-foundation.org: fix ntfs build some more]
      Signed-off-by: NChristoph Lameter <clameter@sgi.com>
      Cc: Steven French <sfrench@us.ibm.com>
      Cc: Michael Halcrow <mhalcrow@us.ibm.com>
      Cc: <linux-ext4@vger.kernel.org>
      Cc: Steven Whitehouse <swhiteho@redhat.com>
      Cc: Trond Myklebust <trond.myklebust@fys.uio.no>
      Cc: "J. Bruce Fields" <bfields@fieldses.org>
      Cc: Anton Altaparmakov <aia21@cantab.net>
      Cc: Mark Fasheh <mark.fasheh@oracle.com>
      Cc: David Chinner <dgc@sgi.com>
      Cc: Michael Halcrow <mhalcrow@us.ibm.com>
      Cc: Steven French <sfrench@us.ibm.com>
      Cc: Steven Whitehouse <swhiteho@redhat.com>
      Cc: Trond Myklebust <trond.myklebust@fys.uio.no>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      eebd2aa3
  23. 09 1月, 2008 1 次提交
  24. 31 12月, 2007 1 次提交
  25. 21 11月, 2007 1 次提交
    • J
      [CIFS] Fix potential data corruption when writing out cached dirty pages · cea21805
      Jeff Layton 提交于
      Fix RedHat bug 329431
      
      The idea here is separate "conscious" from "unconscious" flushes.
      Conscious flushes are those due to a fsync() or close(). Unconscious
      ones are flushes that occur as a side effect of some other operation or
      due to memory pressure.
      
      Currently, when an error occurs during an unconscious flush (ENOSPC or
      EIO), we toss out the page and don't preserve that error to report to
      the user when a conscious flush occurs. If after the unconscious flush,
      there are no more dirty pages for the inode, the conscious flush will
      simply return success even though there were previous errors when writing
      out pages. This can lead to data corruption.
      
      The easiest way to reproduce this is to mount up a CIFS share that's
      very close to being full or where the user is very close to quota. mv
      a file to the share that's slightly larger than the quota allows. The
      writes will all succeed (since they go to pagecache). The mv will do a
      setattr to set the new file's attributes. This calls
      filemap_write_and_wait,
      which will return an error since all of the pages can't be written out.
      Then later, when the flush and release ops occur, there are no more
      dirty pages in pagecache for the file and those operations return 0. mv
      then assumes that the file was written out correctly and deletes the
      original.
      
      CIFS already has a write_behind_rc variable where it stores the results
      from earlier flushes, but that value is only reported in cifs_close.
      Since the VFS ignores the return value from the release operation, this
      isn't helpful. We should be reporting this error during the flush
      operation.
      
      This patch does the following:
      
      1) changes cifs_fsync to use filemap_write_and_wait and cifs_flush and also
      sync to check its return code. If it returns successful, they then check
      the value of write_behind_rc to see if an earlier flush had reported any
      errors. If so, they return that error and clear write_behind_rc.
      
      2) sets write_behind_rc in a few other places where pages are written
      out as a side effect of other operations and the code waits on them.
      
      3) changes cifs_setattr to only call filemap_write_and_wait for
      ATTR_SIZE changes.
      
      4) makes cifs_writepages accurately distinguish between EIO and ENOSPC
      errors when writing out pages.
      
      Some simple testing indicates that the patch works as expected and that
      it fixes the reproduceable known problem.
      Acked-by: NDave Kleikamp <shaggy@austin.rr.com>
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NSteve French <sfrench@us.ibm.com>
      cea21805
  26. 31 10月, 2007 1 次提交