15 May, 2007

4 commits

  • Move the kfree() call inside the ep_free() function.

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

    Davide Libenzi
     
  • Fixes some epoll code comments.

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

    Davide Libenzi
     
  • Changes the rwlock to a spinlock, and drops the use-count variable.
    Operations are always bound by the mutex now, so the use-count is no more
    needed. For the same reason, the rwlock can become a simple spinlock.

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

    Davide Libenzi
     
  • Fixes the epoll single pass code. During the unlocked event delivery (to
    userspace) code, the poll callback can re-issue new events, and we must
    receive them correctly. Since we loop in a lockless fashion, we want to be
    O(nready), and we don't want to flash on/off the spinlock for every event, we
    have the poll callback to use a secondary list to queue events while we're
    inside the event delivery loop. The rw_semaphore has been turned into a
    mutex. This patch also adds the wait-exclusive flag, as suggested by Davi
    Arnaut.

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

    Davide Libenzi
     

13 May, 2007

1 commit

  • Use zero_user_page() instead of open-coding it.

    [akpm@linux-foundation.org: kmap-type fixes]
    Signed-off-by: Nate Diller
    Acked-by: Anton Altaparmakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nate Diller
     

12 May, 2007

1 commit


11 May, 2007

27 commits

  • Re-arrange epoll code to avoid static functions pre-declarations, and apply
    akpm-filter on it.

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

    Davide Libenzi
     
  • Epoll is either compiled it, or not (if EMBEDDED). Remove the module code
    and use fs_initcall().

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

    Davide Libenzi
     
  • Cut out lots of code from epoll, by reusing the anonymous inode source
    patch (fs/anon_inodes.c).

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

    Davide Libenzi
     
  • This is an example about how to add eventfd support to the current KAIO code,
    in order to enable KAIO to post readiness events to a pollable fd (hence
    compatible with POSIX select/poll). The KAIO code simply signals the eventfd
    fd when events are ready, and this triggers a POLLIN in the fd. This patch
    uses a reserved for future use member of the struct iocb to pass an eventfd
    file descriptor, that KAIO will use to post events every time a request
    completes. At that point, an aio_getevents() will return the completed result
    to a struct io_event. I made a quick test program to verify the patch, and it
    runs fine here:

    http://www.xmailserver.org/eventfd-aio-test.c

    The test program uses poll(2), but it'd, of course, work with select and epoll
    too.

    This can allow to schedule both block I/O and other poll-able devices
    requests, and wait for results using select/poll/epoll. In a typical
    scenario, an application would submit KAIO request using aio_submit(), and
    will also use epoll_ctl() on the whole other class of devices (that with the
    addition of signals, timers and user events, now it's pretty much complete),
    and then would:

    epoll_wait(...);
    for_each_event {
    if (curr_event_is_kaiofd) {
    aio_getevents();
    dispatch_aio_events();
    } else {
    dispatch_epoll_event();
    }
    }

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

    Davide Libenzi
     
  • This is a very simple and light file descriptor, that can be used as event
    wait/dispatch by userspace (both wait and dispatch) and by the kernel
    (dispatch only). It can be used instead of pipe(2) in all cases where those
    would simply be used to signal events. Their kernel overhead is much lower
    than pipes, and they do not consume two fds. When used in the kernel, it can
    offer an fd-bridge to enable, for example, functionalities like KAIO or
    syslets/threadlets to signal to an fd the completion of certain operations.
    But more in general, an eventfd can be used by the kernel to signal readiness,
    in a POSIX poll/select way, of interfaces that would otherwise be incompatible
    with it. The API is:

    int eventfd(unsigned int count);

    The eventfd API accepts an initial "count" parameter, and returns an eventfd
    fd. It supports poll(2) (POLLIN, POLLOUT, POLLERR), read(2) and write(2).

    The POLLIN flag is raised when the internal counter is greater than zero.

    The POLLOUT flag is raised when at least a value of "1" can be written to the
    internal counter.

    The POLLERR flag is raised when an overflow in the counter value is detected.

    The write(2) operation can never overflow the counter, since it blocks (unless
    O_NONBLOCK is set, in which case -EAGAIN is returned).

    But the eventfd_signal() function can do it, since it's supposed to not sleep
    during its operation.

    The read(2) function reads the __u64 counter value, and reset the internal
    value to zero. If the value read is equal to (__u64) -1, an overflow happened
    on the internal counter (due to 2^64 eventfd_signal() posts that has never
    been retired - unlickely, but possible).

    The write(2) call writes an __u64 count value, and adds it to the current
    counter. The eventfd fd supports O_NONBLOCK also.

    On the kernel side, we have:

    struct file *eventfd_fget(int fd);
    int eventfd_signal(struct file *file, unsigned int n);

    The eventfd_fget() should be called to get a struct file* from an eventfd fd
    (this is an fget() + check of f_op being an eventfd fops pointer).

    The kernel can then call eventfd_signal() every time it wants to post an event
    to userspace. The eventfd_signal() function can be called from any context.
    An eventfd() simple test and bench is available here:

    http://www.xmailserver.org/eventfd-bench.c

    This is the eventfd-based version of pipetest-4 (pipe(2) based):

    http://www.xmailserver.org/pipetest-4.c

    Not that performance matters much in the eventfd case, but eventfd-bench
    shows almost as double as performance than pipetest-4.

    [akpm@linux-foundation.org: fix i386 build]
    [akpm@linux-foundation.org: add sys_eventfd to sys_ni.c]
    Signed-off-by: Davide Libenzi
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Davide Libenzi
     
  • This patch implements the necessary compat code for the timerfd system call.

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

    Davide Libenzi
     
  • This patch introduces a new system call for timers events delivered though
    file descriptors. This allows timer event to be used with standard POSIX
    poll(2), select(2) and read(2). As a consequence of supporting the Linux
    f_op->poll subsystem, they can be used with epoll(2) too.

    The system call is defined as:

    int timerfd(int ufd, int clockid, int flags, const struct itimerspec *utmr);

    The "ufd" parameter allows for re-use (re-programming) of an existing timerfd
    w/out going through the close/open cycle (same as signalfd). If "ufd" is -1,
    s new file descriptor will be created, otherwise the existing "ufd" will be
    re-programmed.

    The "clockid" parameter is either CLOCK_MONOTONIC or CLOCK_REALTIME. The time
    specified in the "utmr->it_value" parameter is the expiry time for the timer.

    If the TFD_TIMER_ABSTIME flag is set in "flags", this is an absolute time,
    otherwise it's a relative time.

    If the time specified in the "utmr->it_interval" is not zero (.tv_sec == 0,
    tv_nsec == 0), this is the period at which the following ticks should be
    generated.

    The "utmr->it_interval" should be set to zero if only one tick is requested.
    Setting the "utmr->it_value" to zero will disable the timer, or will create a
    timerfd without the timer enabled.

    The function returns the new (or same, in case "ufd" is a valid timerfd
    descriptor) file, or -1 in case of error.

    As stated before, the timerfd file descriptor supports poll(2), select(2) and
    epoll(2). When a timer event happened on the timerfd, a POLLIN mask will be
    returned.

    The read(2) call can be used, and it will return a u32 variable holding the
    number of "ticks" that happened on the interface since the last call to
    read(2). The read(2) call supportes the O_NONBLOCK flag too, and EAGAIN will
    be returned if no ticks happened.

    A quick test program, shows timerfd working correctly on my amd64 box:

    http://www.xmailserver.org/timerfd-test.c

    [akpm@linux-foundation.org: add sys_timerfd to sys_ni.c]
    Signed-off-by: Davide Libenzi
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Davide Libenzi
     
  • This patch implements the necessary compat code for the signalfd system call.

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

    Davide Libenzi
     
  • This patch series implements the new signalfd() system call.

    I took part of the original Linus code (and you know how badly it can be
    broken :), and I added even more breakage ;) Signals are fetched from the same
    signal queue used by the process, so signalfd will compete with standard
    kernel delivery in dequeue_signal(). If you want to reliably fetch signals on
    the signalfd file, you need to block them with sigprocmask(SIG_BLOCK). This
    seems to be working fine on my Dual Opteron machine. I made a quick test
    program for it:

    http://www.xmailserver.org/signafd-test.c

    The signalfd() system call implements signal delivery into a file descriptor
    receiver. The signalfd file descriptor if created with the following API:

    int signalfd(int ufd, const sigset_t *mask, size_t masksize);

    The "ufd" parameter allows to change an existing signalfd sigmask, w/out going
    to close/create cycle (Linus idea). Use "ufd" == -1 if you want a brand new
    signalfd file.

    The "mask" allows to specify the signal mask of signals that we are interested
    in. The "masksize" parameter is the size of "mask".

    The signalfd fd supports the poll(2) and read(2) system calls. The poll(2)
    will return POLLIN when signals are available to be dequeued. As a direct
    consequence of supporting the Linux poll subsystem, the signalfd fd can use
    used together with epoll(2) too.

    The read(2) system call will return a "struct signalfd_siginfo" structure in
    the userspace supplied buffer. The return value is the number of bytes copied
    in the supplied buffer, or -1 in case of error. The read(2) call can also
    return 0, in case the sighand structure to which the signalfd was attached,
    has been orphaned. The O_NONBLOCK flag is also supported, and read(2) will
    return -EAGAIN in case no signal is available.

    If the size of the buffer passed to read(2) is lower than sizeof(struct
    signalfd_siginfo), -EINVAL is returned. A read from the signalfd can also
    return -ERESTARTSYS in case a signal hits the process. The format of the
    struct signalfd_siginfo is, and the valid fields depends of the (->code &
    __SI_MASK) value, in the same way a struct siginfo would:

    struct signalfd_siginfo {
    __u32 signo; /* si_signo */
    __s32 err; /* si_errno */
    __s32 code; /* si_code */
    __u32 pid; /* si_pid */
    __u32 uid; /* si_uid */
    __s32 fd; /* si_fd */
    __u32 tid; /* si_fd */
    __u32 band; /* si_band */
    __u32 overrun; /* si_overrun */
    __u32 trapno; /* si_trapno */
    __s32 status; /* si_status */
    __s32 svint; /* si_int */
    __u64 svptr; /* si_ptr */
    __u64 utime; /* si_utime */
    __u64 stime; /* si_stime */
    __u64 addr; /* si_addr */
    };

    [akpm@linux-foundation.org: fix signalfd_copyinfo() on i386]
    Signed-off-by: Davide Libenzi
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Davide Libenzi
     
  • This patch add an anonymous inode source, to be used for files that need
    and inode only in order to create a file*. We do not care of having an
    inode for each file, and we do not even care of having different names in
    the associated dentries (dentry names will be same for classes of file*).
    This allow code reuse, and will be used by epoll, signalfd and timerfd
    (and whatever else there'll be).

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

    Davide Libenzi
     
  • Make autofs container-friendly by caching struct pid reference rather than
    pid_t and using pid_nr() to retreive a task's pid_t.

    ChangeLog:
    - Fix Eric Biederman's comments - Use find_get_pid() to hold a
    reference to oz_pgrp and release while unmounting; separate out
    changes to autofs and autofs4.
    - Fix Cedric's comments: retain old prototype of parse_options()
    and move necessary change to its caller.

    Signed-off-by: Sukadev Bhattiprolu
    Cc: Cedric Le Goater
    Cc: Dave Hansen
    Cc: Serge Hallyn
    Cc: Eric Biederman
    Cc: containers@lists.osdl.org
    Acked-by: Eric W. Biederman
    Cc: Ian Kent
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sukadev Bhattiprolu
     
  • Fix coding style errors (extra spaces, long lines) in autofs and autofs4 files
    being modified for container/pidspace issues.

    Signed-off-by: Sukadev Bhattiprolu
    Cc: Cedric Le Goater
    Cc: Dave Hansen
    Cc: Serge Hallyn
    Cc:
    Cc: Eric W. Biederman
    Cc: Ian Kent
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sukadev Bhattiprolu
     
  • attach_pid() currently takes a pid_t and then uses find_pid() to find the
    corresponding struct pid. Sometimes we already have the struct pid. We can
    then skip find_pid() if attach_pid() were to take a struct pid parameter.

    Signed-off-by: Sukadev Bhattiprolu
    Cc: Cedric Le Goater
    Cc: Dave Hansen
    Cc: Serge Hallyn
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sukadev Bhattiprolu
     
  • Clean up massive code duplication between mpage_writepages() and
    generic_writepages().

    The new generic function, write_cache_pages() takes a function pointer
    argument, which will be called for each page to be written.

    Maybe cifs_writepages() too can use this infrastructure, but I'm not
    touching that with a ten-foot pole.

    The upcoming page writeback support in fuse will also want this.

    Signed-off-by: Miklos Szeredi
    Acked-by: Christoph Hellwig
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Miklos Szeredi
     
  • Remove unused argument in is_pmbr_valid()
    Remove unneeded initialization of local variable legacy_mbr

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

    Olaf Hering
     
  • Don't enable SYSV68 partition table support on all m68k boxes by default,
    only on Motorola VME boards.

    Signed-off-by: Geert Uytterhoeven
    Cc: Philippe De Muyter
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Geert Uytterhoeven
     
  • Implement the statfs() op for AFS.

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

    David Howells
     
  • Fix a couple of problems with unlinking AFS files.

    (1) The parent directory wasn't being updated properly between unlink() and
    the following lookup().

    It seems that, for some reason, invalidate_remote_inode() wasn't
    discarding the directory contents correctly, so this patch calls
    invalidate_inode_pages2() instead on non-regular files.

    (2) afs_vnode_deleted_remotely() should handle vnodes that don't have a
    source server recorded without oopsing.

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

    David Howells
     
  • Following bug was uncovered by compiling with '-W' flag:

    CC [M] fs/afs/write.o
    fs/afs/write.c: In function ‘afs_write_back_from_locked_page’:
    fs/afs/write.c:398: warning: comparison of unsigned expression >= 0 is always true

    Loop variable 'n' is unsigned, so wraps around happily as far as I can
    see. Trival fix attached (compile tested only).

    Signed-off-by: Mika Kukkonen
    Signed-off-by: David Howells
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Howells
     
  • Hi,

    I have been working on some code that detects abnormal events based on audit
    system events. One kind of event that we currently have no visibility for is
    when a program terminates due to segfault - which should never happen on a
    production machine. And if it did, you'd want to investigate it. Attached is a
    patch that collects these events and sends them into the audit system.

    Signed-off-by: Steve Grubb
    Signed-off-by: Al Viro

    Steve Grubb
     
  • Handle the edge cases for POSIX message queue auditing. Collect inode
    info when opening an existing mq, and for send/receive operations. Remove
    audit_inode_update() as it has really evolved into the equivalent of
    audit_inode().

    Signed-off-by: Amy Griffis
    Signed-off-by: Al Viro

    Amy Griffis
     
  • Collect inode info for the remaining xattr syscalls that operate on a file
    descriptor. These don't call a path_lookup variant, so they aren't covered by
    the general audit hook.

    Signed-off-by: Amy Griffis
    Signed-off-by: Al Viro

    Amy Griffis
     
  • In 9d6a8c5c213e34c475e72b245a8eb709258e968c we changed posix_test_lock
    to modify its single file_lock argument instead of taking separate input
    and output arguments. This makes it no longer safe to set the output
    lock's fl_type to F_UNLCK before looking for a conflict, since that
    means searching for a conflict against a lock with type F_UNLCK.

    This fixes a regression which causes F_GETLK to incorrectly report no
    conflict on most filesystems (including any filesystem that doesn't do
    its own locking).

    Also fix posix_lock_to_flock() to copy the lock type. This isn't
    strictly necessary, since the caller already does this; but it seems
    less likely to cause confusion in the future.

    Thanks to Doug Chapman for the bug report.

    Signed-off-by: "J. Bruce Fields"
    Acked-by: Doug Chapman
    Signed-off-by: Linus Torvalds

    J. Bruce Fields
     
  • A small regression appears to have been introduced in the recent patch
    "cleanup compat ioctl handling", which was included in Linus' tree after
    2.6.20.

    siocdevprivate_ioctl() is no longer defined if CONFIG_NET is undefined,
    whereas previously it was a dummy function in this case.

    This causes compilation with CONFIG_COMPAT but without CONFIG_NET to fail.

    fs/compat_ioctl.c: In function `compat_sys_ioctl':
    fs/compat_ioctl.c:3571: warning: implicit declaration of function `siocdevprivate_ioctl'

    Cc: Christoph Hellwig
    Acked-by: Arnd Bergmann
    Cc: Andi Kleen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Simon Horman
     
  • Fix gcc warning and Oops that it causes:

    fs/ocfs2/cluster/masklog.c:161: warning: assignment from incompatible pointer type
    [ 2776.204120] OCFS2 Node Manager 1.3.3
    [ 2776.211729] BUG: spinlock bad magic on CPU#0, modprobe/4424
    [ 2776.214269] lock: ffff810021c8fe18, .magic: ffffffff, .owner: /6394416, .owner_cpu: 0
    [ 2776.217864] [ 2776.217865] Call Trace:
    [ 2776.219662] [] spin_bug+0x9e/0xe9
    [ 2776.221921] [] _raw_spin_lock+0x23/0xf9
    [ 2776.224417] [] _spin_lock+0x9/0xb
    [ 2776.226676] [] kobject_shadow_add+0x98/0x1ac
    [ 2776.229367] [] kobject_add+0xb/0xd
    [ 2776.231665] [] kset_add+0xd/0xf
    [ 2776.233845] [] kset_register+0x23/0x28
    [ 2776.236309] [] :ocfs2_nodemanager:mlog_sys_init+0x68/0x6d
    [ 2776.239518] [] :ocfs2_nodemanager:o2cb_sys_init+0x32/0x4a
    [ 2776.242726] [] :ocfs2_nodemanager:init_o2nm+0xa6/0xd5
    [ 2776.245772] [] sys_init_module+0x1471/0x15d2
    [ 2776.248465] [] simple_strtoull+0x0/0xdc
    [ 2776.250959] [] system_call+0x7e/0x83

    Signed-off-by: Randy Dunlap
    Acked-by: Mark Fasheh
    Cc: Greg KH
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Randy Dunlap
     
  • Further fixes for AFS write support:

    (1) The afs_send_pages() outer loop must do an extra iteration if it ends
    with 'first == last' because 'last' is inclusive in the page set
    otherwise it fails to send the last page and complete the RxRPC op under
    some circumstances.

    (2) Similarly, the outer loop in afs_pages_written_back() must also do an
    extra iteration if it ends with 'first == last', otherwise it fails to
    clear PG_writeback on the last page under some circumstances.

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

    David Howells
     
  • AFS write support fixes:

    (1) Support large files using the 64-bit file access operations if available
    on the server.

    (2) Use kmap_atomic() rather than kmap() in afs_prepare_page().

    (3) Don't do stuff in afs_writepage() that's done by the caller.

    [akpm@linux-foundation.org: fix right shift count >= width of type]
    Signed-off-by: David Howells
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Howells
     

10 May, 2007

7 commits

  • Signed-off-by: Jesper Juhl
    Acked-by: Trond Myklebust
    Signed-off-by: Andrew Morton
    Signed-off-by: Trond Myklebust

    Jesper Juhl
     
  • use __set_current_state(TASK_*) instead of current->state = TASK_*, in fs/nfs

    Signed-off-by: Milind Arun Choudhary
    Cc: Trond Myklebust
    Cc: "J. Bruce Fields"
    Signed-off-by: Andrew Morton
    Signed-off-by: Trond Myklebust

    Milind Arun Choudhary
     
  • Make it more useful for debugging purposes.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • The maximum size of an NFSv4 SETATTR compound reply should include the
    GETATTR operation that we send.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     
  • The check for nfs_attribute_timeout(dir) in nfs_check_verifier is
    redundant: nfs_lookup_revalidate() will already call nfs_revalidate_inode()
    on the parent dir when necessary.

    The only case where this is not done is the case of a negative dentry. Fix
    this case by moving up the revalidation code.

    Signed-off-by: Trond Myklebust

    Trond Myklebust
     
  • dentry verifiers are always set to the parent directory's
    cache_change_attribute. There is no reason to be testing for anything other
    than equality when we're trying to find out if the dentry has been checked
    since the last time the directory was modified.

    Signed-off-by: Trond Myklebust

    Trond Myklebust
     
  • * git://git.infradead.org/mtd-2.6: (21 commits)
    [MTD] [CHIPS] Remove MTD_OBSOLETE_CHIPS (jedec, amd_flash, sharp)
    [MTD] Delete allegedly obsolete "bank_size" field of mtd_info.
    [MTD] Remove unnecessary user space check from mtd.h.
    [MTD] [MAPS] Remove flash maps for no longer supported 405LP boards
    [MTD] [MAPS] Fix missing printk() parameter in physmap_of.c MTD driver
    [MTD] [NAND] platform NAND driver: add driver
    [MTD] [NAND] platform NAND driver: update header
    [JFFS2] Simplify and clean up jffs2_add_tn_to_tree() some more.
    [JFFS2] Remove another bogus optimisation in jffs2_add_tn_to_tree()
    [JFFS2] Remove broken insert_point optimisation in jffs2_add_tn_to_tree()
    [JFFS2] Remember to calculate overlap on nodes which replace older nodes
    [JFFS2] Don't advance c->wbuf_ofs to next eraseblock after wbuf flush
    [MTD] [NAND] at91_nand.c: CMDLINE_PARTS support
    [MTD] [NAND] Tidy up handling of page number in nand_block_bad()
    [MTD] block2mtd_paramline[] mustn't be __initdata
    [MTD] [NAND] Support multiple chips in CAFÉ driver
    [MTD] [NAND] Rename cafe.c to cafe_nand.c and remove the multi-obj magic
    [MTD] [NAND] Use rslib for CAFÉ ECC
    [RSLIB] Support non-canonical GF representations
    [JFFS2] Remove dead file histo_mips.h
    ...

    Linus Torvalds