1. 26 Feb, 2010 10 commits
    • Joel Becker's avatar
      ocfs2: Handle value tree roots in ocfs2_xa_set_inline_value() · 9dc47400
      Joel Becker authored
      Previously the xattr code would send in a fake value, containing a tree
      root, to the function that installed name+value pairs.  Instead, we pass
      the real value to ocfs2_xa_set_inline_value(), and it notices that the
      value cannot fit.  Thus, it installs a tree root.
      Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
      9dc47400
    • Joel Becker's avatar
      ocfs2: Set the xattr name+value pair in one place · 69a3e539
      Joel Becker authored
      We create two new functions on ocfs2_xa_loc, ocfs2_xa_prepare_entry()
      and ocfs2_xa_store_inline_value().
      
      ocfs2_xa_prepare_entry() makes sure that the xl_entry field of
      ocfs2_xa_loc is ready to receive an xattr.  The entry will point to an
      appropriately sized name+value region in storage.  If an existing entry
      can be reused, it will be.  If no entry already exists, it will be
      allocated.  If there isn't space to allocate it, -ENOSPC will be
      returned.
      
      ocfs2_xa_store_inline_value() stores the data that goes into the 'value'
      part of the name+value pair.  For values that don't fit directly, this
      stores the value tree root.
      
      A number of operations are added to ocfs2_xa_loc_operations to support
      these functions.  This reflects the disparate behaviors of xattr blocks
      and buckets.
      
      With these functions, the overlapping ocfs2_xattr_set_entry_local() and
      ocfs2_xattr_set_entry_normal() can be replaced with a single call
      scheme.
      Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
      69a3e539
    • Joel Becker's avatar
      ocfs2: Wrap calculation of name+value pair size. · 199799a3
      Joel Becker authored
      An ocfs2 xattr entry stores the text name and value as a pair in the
      storage area.  Obviously names and values can be variable-sized.  If a
      value is too large for the entry storage, a tree root is stored instead.
      The name+value pair is also padded.
      
      Because of this, there are a million places in the code that do:
      
      	if (needs_external_tree(value_size)
      		namevalue_size = pad(name_size) + tree_root_size;
      	else
      		namevalue_size = pad(name_size) + pad(value_size);
      
      Let's create some convenience functions to make the code more readable.
      There are three forms.  The first takes the raw sizes.  The second takes
      an ocfs2_xattr_info structure.  The third takes an existing
      ocfs2_xattr_entry.
      Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
      199799a3
    • Joel Becker's avatar
      ocfs2: Add a name_len field to ocfs2_xattr_info. · 18853b95
      Joel Becker authored
      Rather than calculating strlen all over the place, let's store the
      name length directly on ocfs2_xattr_info.
      Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
      18853b95
    • Joel Becker's avatar
      ocfs2: Prefix the member fields of struct ocfs2_xattr_info. · 6b240ff6
      Joel Becker authored
      struct ocfs2_xattr_info is a useful structure describing an xattr
      you'd like to set.  Let's put prefixes on the member fields so it's
      easier to read and use.
      Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
      6b240ff6
    • Joel Becker's avatar
      ocfs2: Remove xattrs via ocfs2_xa_loc · bde1e540
      Joel Becker authored
      Add ocfs2_xa_remove_entry(), which will remove an xattr entry from its
      storage via the ocfs2_xa_loc descriptor.
      Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
      bde1e540
    • Joel Becker's avatar
      ocfs2: Introduce ocfs2_xa_loc · 11179f2c
      Joel Becker authored
      The ocfs2 extended attribute (xattr) code is very flexible.  It can
      store xattrs in the inode itself, in an external block, or in a tree of
      data structures.  This allows the number of xattrs to be bounded by the
      filesystem size.
      
      However, the code that manages each possible storage location is
      different.  Maintaining the ocfs2 xattr code requires changing each hunk
      separately.
      
      This patch is the start of a series introducing the ocfs2_xa_loc
      structure.  This structure wraps the on-disk details of an xattr
      entry.  The goal is that the generic xattr routines can use
      ocfs2_xa_loc without knowing the underlying storage location.
      
      This first pass merely implements the basic structure, initializing it,
      and wiping the name+value pair of the entry.
      Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
      11179f2c
    • Sunil Mushran's avatar
      ocfs2: Add current->comm in trace output · 8545e03d
      Sunil Mushran authored
      Add current->comm to the standard mlog() output to help with debugging.
      Signed-off-by: default avatarSunil Mushran <sunil.mushran@oracle.com>
      Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
      8545e03d
    • Wengang Wang's avatar
      ocfs2: Clean up the checks for CoW and direct I/O. · 96a1cc73
      Wengang Wang authored
      When ocfs2 has to do CoW for refcounted extents, we disable direct I/O
      and go through the buffered I/O path.  This makes the combined check
      easier to read.
      Signed-off-by: default avatarWengang Wang <wen.gang.wang@oracle.com>
      Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
      96a1cc73
    • Tiger Yang's avatar
      ocfs2: add extent block stealing for ocfs2 v5 · b89c5428
      Tiger Yang authored
      This patch add extent block (metadata) stealing mechanism for
      extent allocation. This mechanism is same as the inode stealing.
      if no room in slot specific extent_alloc, we will try to
      allocate extent block from the next slot.
      Signed-off-by: default avatarTiger Yang <tiger.yang@oracle.com>
      Acked-by: default avatarTao Ma <tao.ma@oracle.com>
      Signed-off-by: default avatarJoel Becker <joel.becker@oracle.com>
      b89c5428
  2. 09 Feb, 2010 1 commit
    • Linus Torvalds's avatar
      Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2 · a5f28ae4
      Linus Torvalds authored
      * 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jlbec/ocfs2:
        ocfs2/cluster: Make o2net connect messages KERN_NOTICE
        ocfs2/dlm: Fix printing of lockname
        ocfs2: Fix contiguousness check in ocfs2_try_to_merge_extent_map()
        ocfs2/dlm: Remove BUG_ON in dlm recovery when freeing locks of a dead node
        ocfs2: Plugs race between the dc thread and an unlock ast message
        ocfs2: Remove overzealous BUG_ON during blocked lock processing
        ocfs2: Do not downconvert if the lock level is already compatible
        ocfs2: Prevent a livelock in dlmglue
        ocfs2: Fix setting of OCFS2_LOCK_BLOCKED during bast
        ocfs2: Use compat_ptr in reflink_arguments.
        ocfs2/dlm: Handle EAGAIN for compatibility - v2
        ocfs2: Add parenthesis to wrap the check for O_DIRECT.
        ocfs2: Only bug out when page size is larger than cluster size.
        ocfs2: Fix memory overflow in cow_by_page.
        ocfs2/dlm: Print more messages during lock migration
        ocfs2/dlm: Ignore LVBs of locks in the Blocked list
        ocfs2/trivial: Remove trailing whitespaces
        ocfs2: fix a misleading variable name
        ocfs2: Sync max_inline_data_with_xattr from tools.
        ocfs2: Fix refcnt leak on ocfs2_fast_follow_link() error path
      a5f28ae4
  3. 08 Feb, 2010 16 commits
  4. 07 Feb, 2010 10 commits
  5. 06 Feb, 2010 3 commits