Skip to content
Snippets Groups Projects
  1. Dec 19, 2013
    • Raphael S. Carvalho's avatar
      bsd: Fix unimplemented copystr() and copyinstr() · cc8bf695
      Raphael S. Carvalho authored
      
      Over the process of creating a zpool, history_str_get() will be eventually
      called by zfs_ioc_pool_create(). history_str_get() will not work as expected as
      it fully relies on the function copyinstr() which is currently unimplemented.
      
      After that, spa_create() will be called with history_str storing trash, thus
      making the spa_history_log filled with completely wrong entries.
      
      Let's fix this problem simply by implementing copyinstr. By the way, copystr
      has basically the same semantics as copyinstr, so let's implement it as well.
      It's not being used anywhere, but who knows? It might be needed in the future
      by some bsd compliant application.
      
      As far as I know, this problem didn't manifest *visibly* anywhere as the spa
      history log wasn't intentionally used by us yet. I found the problem while
      auditing code.
      
      Signed-off-by: default avatarRaphael S. Carvalho <raphaelsc@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      cc8bf695
  2. Dec 16, 2013
  3. Dec 12, 2013
  4. Dec 10, 2013
    • Raphael S. Carvalho's avatar
      vfs: Fix duplicate in-memory vnodes · 9ecda822
      Raphael S. Carvalho authored
      
      Currently, namei() does vget() unconditionally if no dentry is found.
      This is wrong because the path can be a hard link that points to a vnode
      that's already in memory.
      
      To fix the problem:
      
        - Use inode number as part of the hash in vget()
      
        - Use vn_lookup() in vget() to make sure we have one vnode in memory
          per inode number.
      
        - Push the vget() calls down to individual filesystems and make
          VOP_LOOKUP return an vnode
      
      Changes since v2:
        - v1 dropped lock in vn_lookup, thus assert that vnode_lock is held.
      
      Changes since v3:
        - Fix lock ordering issue in dentry_lookup. The lock respective to the parent
      node must be acquired before dentry_lookup and released after the process is
      done. Otherwise, a second thread looking up for the same dentry may take the
      'NULL' path incorrectly.
      
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      Signed-off-by: default avatarRaphael S. Carvalho <raphaelsc@cloudius-systems.com>
      Signed-off-by: default avatarAvi Kivity <avi@cloudius-systems.com>
      9ecda822
    • Nadav Har'El's avatar
      Fix wrong error codes in unlink(), rmdir() and readdir() · 86b5374f
      Nadav Har'El authored
      
      This patch fixes the error codes in four error cases:
      
      1. unlink() of a directory used to return EPERM (as in Posix), and now
         returns EISDIR (as in Linux).
      
      2. rmdir() of a non-empty directory used to return EEXIST (as in Posix)
         and now returns ENOTEMPTY (as in Linux).
      
      3. rmdir() of a regular file (non-directory) used to return EBADF
         and now returns ENOTDIR (as in Linux).
      
      4. readdir() of a regular file (non-directory) used to return EBADF
         and now returns ENOTDIR (as in Linux).
      
      This patch also adds a test, tst-remove.cc, for the various unlink() and
      rmdir() success and failure modes.
      
      Fixes #123.
      
      Signed-off-by: default avatarNadav Har'El <nyh@cloudius-systems.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cloudius-systems.com>
      86b5374f
  5. Dec 09, 2013
  6. Dec 08, 2013
  7. Dec 05, 2013
  8. Dec 04, 2013
  9. Dec 03, 2013
  10. Dec 02, 2013
  11. Dec 01, 2013
  12. Nov 28, 2013
  13. Nov 27, 2013
  14. Nov 26, 2013
  15. Nov 11, 2013
Loading