24 Sep, 2009

1 commit

  • Most call sites of unload_nls() do:
    if (nls)
    unload_nls(nls);

    Check the pointer inside unload_nls() like we do in kfree() and
    simplify the call sites.

    Signed-off-by: Thomas Gleixner
    Cc: Steve French
    Cc: OGAWA Hirofumi
    Cc: Roman Zippel
    Cc: Dave Kleikamp
    Cc: Petr Vandrovec
    Cc: Anton Altaparmakov
    Signed-off-by: Al Viro

    Thomas Gleixner
     

13 Jul, 2009

1 commit

  • * Remove smp_lock.h from files which don't need it (including some headers!)
    * Add smp_lock.h to files which do need it
    * Make smp_lock.h include conditional in hardirq.h
    It's needed only for one kernel_locked() usage which is under CONFIG_PREEMPT

    This will make hardirq.h inclusion cheaper for every PREEMPT=n config
    (which includes allmodconfig/allyesconfig, BTW)

    Signed-off-by: Alexey Dobriyan
    Signed-off-by: Linus Torvalds

    Alexey Dobriyan
     

12 Jun, 2009

4 commits

  • Add a ->sync_fs method for data integrity syncs, and reimplement
    ->write_super ontop of it.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Al Viro

    Christoph Hellwig
     
  • Push down lock_super into ->write_super instances and remove it from the
    caller.

    Following filesystem don't need ->s_lock in ->write_super and are skipped:

    * bfs, nilfs2 - no other uses of s_lock and have internal locks in
    ->write_super
    * ext2 - uses BKL in ext2_write_super and has internal calls without s_lock
    * reiserfs - no other uses of s_lock as has reiserfs_write_lock (BKL) in
    ->write_super
    * xfs - no other uses of s_lock and uses internal lock (buffer lock on
    superblock buffer) to serialize ->write_super. Also xfs_fs_write_super
    is superflous and will go away in the next merge window

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Al Viro

    Christoph Hellwig
     
  • Move BKL into ->put_super from the only caller. A couple of
    filesystems had trivial enough ->put_super (only kfree and NULLing of
    s_fs_info + stuff in there) to not get any locking: coda, cramfs, efs,
    hugetlbfs, omfs, qnx4, shmem, all others got the full treatment. Most
    of them probably don't need it, but I'd rather sort that out individually.
    Preferably after all the other BKL pushdowns in that area.

    [AV: original used to move lock_super() down as well; these changes are
    removed since we don't do lock_super() at all in generic_shutdown_super()
    now]
    [AV: fuse, btrfs and xfs are known to need no damn BKL, exempt]

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Al Viro

    Christoph Hellwig
     
  • We just did a full fs writeout using sync_filesystem before, and if
    that's not enough for the filesystem it can perform it's own writeout
    in ->put_super, which many filesystems already do.

    Move a call to foofs_write_super into every foofs_put_super for now to
    guarantee identical behaviour until it's cleaned up by the individual
    filesystem maintainers.

    Exceptions:

    - affs already has identical copy & pasted code at the beginning of
    affs_put_super so no need to do it twice.
    - xfs does the right thing without it and I have changes pending for
    the xfs tree touching this are so I don't really need conflicts
    here..

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Al Viro

    Christoph Hellwig
     

03 Apr, 2009

2 commits

  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6:
    Remove two unneeded exports and make two symbols static in fs/mpage.c
    Cleanup after commit 585d3bc06f4ca57f975a5a1f698f65a45ea66225
    Trim includes of fdtable.h
    Don't crap into descriptor table in binfmt_som
    Trim includes in binfmt_elf
    Don't mess with descriptor table in load_elf_binary()
    Get rid of indirect include of fs_struct.h
    New helper - current_umask()
    check_unsafe_exec() doesn't care about signal handlers sharing
    New locking/refcounting for fs_struct
    Take fs_struct handling to new file (fs/fs_struct.c)
    Get rid of bumping fs_struct refcount in pivot_root(2)
    Kill unsharing fs_struct in __set_personality()

    Linus Torvalds
     
  • Make hfsplus return f_fsid info for statfs(2).

    Signed-off-by: Coly Li
    Cc: Roman Zippel
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Coly Li
     

01 Apr, 2009

1 commit


28 Mar, 2009

1 commit


22 Jan, 2009

1 commit


14 Nov, 2008

1 commit

  • Wrap access to task credentials so that they can be separated more easily from
    the task_struct during the introduction of COW creds.

    Change most current->(|e|s|fs)[ug]id to current_(|e|s|fs)[ug]id().

    Change some task->e?[ug]id to task_e?[ug]id(). In some places it makes more
    sense to use RCU directly rather than a convenient wrapper; these will be
    addressed by later patches.

    Signed-off-by: David Howells
    Reviewed-by: James Morris
    Acked-by: Serge Hallyn
    Cc: Roman Zippel
    Signed-off-by: James Morris

    David Howells
     

23 Oct, 2008

1 commit

  • 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
     

20 Oct, 2008

2 commits

  • A corrupted extent for the extent file itself may try to get an impossible
    extent, causing a deadlock if I see it correctly.

    Check the inode number after the first_blocks checks and fail if it's the
    extent file, as according to the spec the extent file should have no
    extent for itself.

    Signed-off-by: Eric Sesterhenn
    Cc: Roman Zippel
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Eric Sesterhenn
     
  • hfsplus: O_LARGEFILE checking is missing

    Addresses http://bugzilla.kernel.org/show_bug.cgi?id=8490

    From: Alan Cox
    Reported-by: didier
    Cc: Roman Zippel
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alan Cox
     

17 Oct, 2008

3 commits

  • While testing more corrupted images with hfsplus, i came across
    one which triggered the following bug:

    [15840.675016] BUG: unable to handle kernel paging request at fffffffb
    [15840.675016] IP: [] kmap+0x15/0x56
    [15840.675016] *pde = 00008067 *pte = 00000000
    [15840.675016] Oops: 0000 [#1] PREEMPT DEBUG_PAGEALLOC
    [15840.675016] Modules linked in:
    [15840.675016]
    [15840.675016] Pid: 11575, comm: ln Not tainted (2.6.27-rc4-00123-gd3ee1b4-dirty #29)
    [15840.675016] EIP: 0060:[] EFLAGS: 00010202 CPU: 0
    [15840.675016] EIP is at kmap+0x15/0x56
    [15840.675016] EAX: 00000246 EBX: fffffffb ECX: 00000000 EDX: cab919c0
    [15840.675016] ESI: 000007dd EDI: cab0bcf4 EBP: cab0bc98 ESP: cab0bc94
    [15840.675016] DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068
    [15840.675016] Process ln (pid: 11575, ti=cab0b000 task=cab919c0 task.ti=cab0b000)
    [15840.675016] Stack: 00000000 cab0bcdc c0231cfb 00000000 cab0bce0 00000800 ca9290c0 fffffffb
    [15840.675016] cab145d0 cab919c0 cab15998 22222222 22222222 22222222 00000001 cab15960
    [15840.675016] 000007dd cab0bcf4 cab0bd04 c022cb3a cab0bcf4 cab15a6c ca9290c0 00000000
    [15840.675016] Call Trace:
    [15840.675016] [] ? hfsplus_block_allocate+0x6f/0x2d3
    [15840.675016] [] ? hfsplus_file_extend+0xc4/0x1db
    [15840.675016] [] ? hfsplus_get_block+0x8c/0x19d
    [15840.675016] [] ? sub_preempt_count+0x9d/0xab
    [15840.675016] [] ? __block_prepare_write+0x147/0x311
    [15840.675016] [] ? __grab_cache_page+0x52/0x73
    [15840.675016] [] ? block_write_begin+0x79/0xd5
    [15840.675016] [] ? hfsplus_get_block+0x0/0x19d
    [15840.675016] [] ? cont_write_begin+0x27f/0x2af
    [15840.675016] [] ? hfsplus_get_block+0x0/0x19d
    [15840.675016] [] ? tick_program_event+0x28/0x4c
    [15840.675016] [] ? trace_hardirqs_off+0xb/0xd
    [15840.675016] [] ? hfsplus_write_begin+0x2d/0x32
    [15840.675016] [] ? hfsplus_get_block+0x0/0x19d
    [15840.675016] [] ? pagecache_write_begin+0x33/0x107
    [15840.675016] [] ? __page_symlink+0x3c/0xae
    [15840.675016] [] ? __mark_inode_dirty+0x12f/0x137
    [15840.675016] [] ? page_symlink+0x19/0x1e
    [15840.675016] [] ? hfsplus_symlink+0x41/0xa6
    [15840.675016] [] ? vfs_symlink+0x99/0x101
    [15840.675016] [] ? sys_symlinkat+0x6b/0xad
    [15840.675016] [] ? sys_symlink+0x10/0x12
    [15840.675016] [] ? sysenter_do_call+0x12/0x31
    [15840.675016] =======================
    [15840.675016] Code: 00 00 75 10 83 3d 88 2f ec c0 02 75 07 89 d0 e8 12 56 05 00 5d c3 55 ba 06 00 00 00 89 e5 53 89 c3 b8 3d eb 7e c0 e8 16 74 00 00 03 c1 e8 1e 69 c0 d8 02 00 00 05 b8 69 8e c0 2b 80 c4 02 00
    [15840.675016] EIP: [] kmap+0x15/0x56 SS:ESP 0068:cab0bc94
    [15840.675016] ---[ end trace 4fea40dad6b70e5f ]---

    This happens because the return value of read_mapping_page() is passed on
    to kmap unchecked. The bug is triggered after the first
    read_mapping_page() in hfsplus_block_allocate(), this patch fixes all
    three usages in this functions but leaves the ones further down in the
    file unchanged.

    Signed-off-by: Eric Sesterhenn
    Cc: Roman Zippel
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Eric Sesterhenn
     
  • When an hfsplus image gets corrupted it might happen that the catalog
    namelength field gets b0rked. If we mount such an image the memcpy() in
    hfsplus_cat_build_key_uni() writes more than the 255 that fit in the name
    field. Depending on the size of the overwritten data, we either only get
    memory corruption or also trigger an oops like this:

    [ 221.628020] BUG: unable to handle kernel paging request at c82b0000
    [ 221.629066] IP: [] hfsplus_find_cat+0x10d/0x151
    [ 221.629066] *pde = 0ea29163 *pte = 082b0160
    [ 221.629066] Oops: 0002 [#1] PREEMPT DEBUG_PAGEALLOC
    [ 221.629066] Modules linked in:
    [ 221.629066]
    [ 221.629066] Pid: 4845, comm: mount Not tainted (2.6.27-rc4-00123-gd3ee1b4-dirty #28)
    [ 221.629066] EIP: 0060:[] EFLAGS: 00010206 CPU: 0
    [ 221.629066] EIP is at hfsplus_find_cat+0x10d/0x151
    [ 221.629066] EAX: 00000029 EBX: 00016210 ECX: 000042c2 EDX: 00000002
    [ 221.629066] ESI: c82d70ca EDI: c82b0000 EBP: c82d1bcc ESP: c82d199c
    [ 221.629066] DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068
    [ 221.629066] Process mount (pid: 4845, ti=c82d1000 task=c8224060 task.ti=c82d1000)
    [ 221.629066] Stack: c080b3c4 c82aa8f8 c82d19c2 00016210 c080b3be c82d1bd4 c82aa8f0 00000300
    [ 221.629066] 01000000 750008b1 74006e00 74006900 65006c00 c82d6400 c013bd35 c8224060
    [ 221.629066] 00000036 00000046 c82d19f0 00000082 c8224548 c8224060 00000036 c0d653cc
    [ 221.629066] Call Trace:
    [ 221.629066] [] ? trace_hardirqs_off+0xb/0xd
    [ 221.629066] [] ? trace_hardirqs_off_caller+0x14/0x9b
    [ 221.629066] [] ? trace_hardirqs_off+0xb/0xd
    [ 221.629066] [] ? trace_hardirqs_off_caller+0x14/0x9b
    [ 221.629066] [] ? trace_hardirqs_off+0xb/0xd
    [ 221.629066] [] ? native_sched_clock+0x82/0x96
    [ 221.629066] [] ? __kernel_text_address+0x1b/0x27
    [ 221.629066] [] ? dump_trace+0xca/0xd6
    [ 221.629066] [] ? save_stack_address+0x0/0x2c
    [ 221.629066] [] ? save_stack_trace+0x1c/0x3a
    [ 221.629066] [] ? save_trace+0x37/0x8d
    [ 221.629066] [] ? add_lock_to_list+0x67/0x8d
    [ 221.629066] [] ? validate_chain+0x8a4/0x9f4
    [ 221.629066] [] ? down+0xc/0x2f
    [ 221.629066] [] ? __lock_acquire+0x68a/0x6e0
    [ 221.629066] [] ? trace_hardirqs_off+0xb/0xd
    [ 221.629066] [] ? trace_hardirqs_off_caller+0x14/0x9b
    [ 221.629066] [] ? trace_hardirqs_off+0xb/0xd
    [ 221.629066] [] ? native_sched_clock+0x82/0x96
    [ 221.629066] [] ? mark_held_locks+0x43/0x5a
    [ 221.629066] [] ? trace_hardirqs_on+0xb/0xd
    [ 221.629066] [] ? trace_hardirqs_on_caller+0xf4/0x12f
    [ 221.629066] [] ? _spin_unlock_irqrestore+0x42/0x58
    [ 221.629066] [] ? down+0x2b/0x2f
    [ 221.629066] [] ? hfsplus_iget+0xa0/0x154
    [ 221.629066] [] ? hfsplus_fill_super+0x280/0x447
    [ 221.629066] [] ? native_sched_clock+0x82/0x96
    [ 221.629066] [] ? trace_hardirqs_off_caller+0x14/0x9b
    [ 221.629066] [] ? trace_hardirqs_off_caller+0x14/0x9b
    [ 221.629066] [] ? __lock_acquire+0x68a/0x6e0
    [ 221.629066] [] ? string+0x2b/0x74
    [ 221.629066] [] ? vsnprintf+0x2e9/0x512
    [ 221.629066] [] ? dump_trace+0xca/0xd6
    [ 221.629066] [] ? save_stack_trace+0x1c/0x3a
    [ 221.629066] [] ? save_stack_trace+0x1c/0x3a
    [ 221.629066] [] ? save_trace+0x37/0x8d
    [ 221.629066] [] ? add_lock_to_list+0x67/0x8d
    [ 221.629066] [] ? validate_chain+0x8a4/0x9f4
    [ 221.629066] [] ? up+0xc/0x2f
    [ 221.629066] [] ? __lock_acquire+0x68a/0x6e0
    [ 221.629066] [] ? trace_hardirqs_off+0xb/0xd
    [ 221.629066] [] ? trace_hardirqs_off_caller+0x14/0x9b
    [ 221.629066] [] ? trace_hardirqs_off+0xb/0xd
    [ 221.629066] [] ? native_sched_clock+0x82/0x96
    [ 221.629066] [] ? snprintf+0x1b/0x1d
    [ 221.629066] [] ? disk_name+0x25/0x67
    [ 221.629066] [] ? get_sb_bdev+0xcd/0x10b
    [ 221.629066] [] ? kstrdup+0x2a/0x4c
    [ 221.629066] [] ? hfsplus_get_sb+0x13/0x15
    [ 221.629066] [] ? hfsplus_fill_super+0x0/0x447
    [ 221.629066] [] ? vfs_kern_mount+0x3b/0x76
    [ 221.629066] [] ? do_kern_mount+0x32/0xba
    [ 221.629066] [] ? do_new_mount+0x46/0x74
    [ 221.629066] [] ? do_mount+0x175/0x193
    [ 221.629066] [] ? trace_hardirqs_on_caller+0xf4/0x12f
    [ 221.629066] [] ? __get_free_pages+0x1e/0x24
    [ 221.629066] [] ? lock_kernel+0x19/0x8c
    [ 221.629066] [] ? sys_mount+0x51/0x9b
    [ 221.629066] [] ? sys_mount+0x64/0x9b
    [ 221.629066] [] ? sysenter_do_call+0x12/0x31
    [ 221.629066] =======================
    [ 221.629066] Code: 89 c2 c1 e2 08 c1 e8 08 09 c2 8b 85 e8 fd ff ff 66 89 50 06 89 c7 53 83 c7 08 56 57 68 c4 b3 80 c0 e8 8c 5c ef ff 89 d9 c1 e9 02 a5 89 d9 83 e1 03 74 02 f3 a4 83 c3 06 8b 95 e8 fd ff ff 0f
    [ 221.629066] EIP: [] hfsplus_find_cat+0x10d/0x151 SS:ESP 0068:c82d199c
    [ 221.629066] ---[ end trace e417a1d67f0d0066 ]---

    Since hfsplus_cat_build_key_uni() returns void and only has one callsite,
    the check is performed at the callsite.

    Signed-off-by: Eric Sesterhenn
    Reviewed-by: Pekka Enberg
    Cc: Roman Zippel
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Eric Sesterhenn
     
  • Check whether the file system was to be mounted read only anyway before
    warning about changing the mount to read only.

    Signed-off-by: Mike Crowe
    Cc: Roman Zippel
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Mike Crowe
     

14 Oct, 2008

1 commit

  • This is a much better version of a previous patch to make the parser
    tables constant. Rather than changing the typedef, we put the "const" in
    all the various places where its required, allowing the __initconst
    exception for nfsroot which was the cause of the previous trouble.

    This was posted for review some time ago and I believe its been in -mm
    since then.

    Signed-off-by: Steven Whitehouse
    Cc: Alexander Viro
    Signed-off-by: Linus Torvalds

    Steven Whitehouse
     

27 Jul, 2008

3 commits

  • make it atomic_long_t; while we are at it, get rid of useless checks in affs,
    hfs and hpfs - ->open() always has it equal to 1, ->release() - to 0.

    Signed-off-by: Al Viro

    Al Viro
     
  • * kill nameidata * argument; map the 3 bits in ->flags anybody cares
    about to new MAY_... ones and pass with the mask.
    * kill redundant gfs2_iop_permission()
    * sanitize ecryptfs_permission()
    * fix remaining places where ->permission() instances might barf on new
    MAY_... found in mask.

    The obvious next target in that direction is permission(9)

    folded fix for nfs_permission() breakage from Miklos Szeredi

    Signed-off-by: Al Viro

    Al Viro
     
  • Kmem cache passed to constructor is only needed for constructors that are
    themselves multiplexeres. Nobody uses this "feature", nor does anybody uses
    passed kmem cache in non-trivial way, so pass only pointer to object.

    Non-trivial places are:
    arch/powerpc/mm/init_64.c
    arch/powerpc/mm/hugetlbpage.c

    This is flag day, yes.

    Signed-off-by: Alexey Dobriyan
    Acked-by: Pekka Enberg
    Acked-by: Christoph Lameter
    Cc: Jon Tollefson
    Cc: Nick Piggin
    Cc: Matt Mackall
    [akpm@linux-foundation.org: fix arch/powerpc/mm/hugetlbpage.c]
    [akpm@linux-foundation.org: fix mm/slab.c]
    [akpm@linux-foundation.org: fix ubifs]
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alexey Dobriyan
     

26 Jul, 2008

1 commit


13 May, 2008

1 commit

  • Fix an oops with a corrupted hfs+ image.

    See http://bugzilla.kernel.org/show_bug.cgi?id=10548 for details.

    Problem is that we call hfs_btree_open() from hfsplus_fill_super() to set
    HFSPLUS_SB(sb).[ext_tree|cat_tree] Both trees are still NULL at this moment.
    If hfs_btree_open() fails for any reason it calls iput() on the page, which
    gets to hfsplus_releasepage() which tries to access HFSPLUS_SB(sb).* which is
    still NULL and oopses while dereferencing it.

    [akpm@linux-foundation.org: build fix]
    Signed-off-by: Eric Sesterhenn
    Cc: Roman Zippel
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Eric Sesterhenn
     

30 Apr, 2008

3 commits


29 Apr, 2008

3 commits


19 Apr, 2008

1 commit


11 Apr, 2008

1 commit

  • Some time ago while attempting to handle invalid link counts, I botched
    the unlink of links itself, so this patch fixes this now correctly, so
    that only the link count of nodes that don't point to links is ignored.
    Thanks to Vlado Plaga to notify me of this
    problem.

    Signed-off-by: Roman Zippel
    Signed-off-by: Linus Torvalds

    Roman Zippel
     

09 Feb, 2008

1 commit


08 Feb, 2008

1 commit

  • Stop the HFSPLUS filesystem from using iget() and read_inode(). Replace
    hfsplus_read_inode() with hfsplus_iget(), and call that instead of iget().
    hfsplus_iget() then uses iget_locked() directly and returns a proper error
    code instead of an inode in the event of an error.

    hfsplus_fill_super() returns any error incurred when getting the root inode.

    Signed-off-by: David Howells
    Cc: Roman Zippel
    Acked-by: Christoph Hellwig
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Howells
     

17 Oct, 2007

2 commits

  • Slab constructors currently have a flags parameter that is never used. And
    the order of the arguments is opposite to other slab functions. The object
    pointer is placed before the kmem_cache pointer.

    Convert

    ctor(void *object, struct kmem_cache *s, unsigned long flags)

    to

    ctor(struct kmem_cache *s, void *object)

    throughout the kernel

    [akpm@linux-foundation.org: coupla fixes]
    Signed-off-by: Christoph Lameter
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     
  • Signed-off-by: Nick Piggin
    Cc: Roman Zippel
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nick Piggin
     

20 Jul, 2007

1 commit

  • Slab destructors were no longer supported after Christoph's
    c59def9f222d44bb7e2f0a559f2906191a0862d7 change. They've been
    BUGs for both slab and slub, and slob never supported them
    either.

    This rips out support for the dtor pointer from kmem_cache_create()
    completely and fixes up every single callsite in the kernel (there were
    about 224, not including the slab allocator definitions themselves,
    or the documentation references).

    Signed-off-by: Paul Mundt

    Paul Mundt
     

18 Jul, 2007

1 commit

  • Introduce is_owner_or_cap() macro in fs.h, and convert over relevant
    users to it. This is done because we want to avoid bugs in the future
    where we check for only effective fsuid of the current task against a
    file's owning uid, without simultaneously checking for CAP_FOWNER as
    well, thus violating its semantics.
    [ XFS uses special macros and structures, and in general looked ...
    untouchable, so we leave it alone -- but it has been looked over. ]

    The (current->fsuid != inode->i_uid) check in generic_permission() and
    exec_permission_lite() is left alone, because those operations are
    covered by CAP_DAC_OVERRIDE and CAP_DAC_READ_SEARCH. Similarly operations
    falling under the purview of CAP_CHOWN and CAP_LEASE are also left alone.

    Signed-off-by: Satyam Sharma
    Cc: Al Viro
    Acked-by: Serge E. Hallyn
    Signed-off-by: Linus Torvalds

    Satyam Sharma
     

17 Jul, 2007

2 commits

  • Add custom dentry hash and comparison operations for HFS+ filesystems that are
    case-insensitive and/or do automatic unicode decomposition. The new
    operations reuse the existing HFS+ ASCII to unicode conversion, unicode
    decomposition and case folding functionality.

    Signed-off-by: Duane Griffin
    Signed-off-by: Roman Zippel

    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Duane Griffin
     
  • The HFS+ filesystem is case-insensitive and does automatic unicode
    decomposition by default, but does not provide custom dentry operations. This
    can lead to multiple dentries being cached for lookups on a filename with
    varying case and/or character (de)composition.

    These patches add custom dentry hash and comparison operations for
    case-sensitive and/or automatically decomposing HFS+ filesystems. Unicode
    decomposition and case-folding are performed as required to ensure equivalent
    filenames are hashed to the same values and compare as equal.

    This patch:

    Refactor existing HFS+ ASCII to unicode string conversion routine to split out
    character conversion functionality. This will be reused by the custom dentry
    hash and comparison routines. This approach avoids unnecessary memory
    allocation compared to using the string conversion routine directly in the new
    functions.

    [akpm@linux-foundation.org: avoid use-of-uninitialised]
    Signed-off-by: Duane Griffin
    Signed-off-by: Roman Zippel
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Duane Griffin