25 Jun, 2015

2 commits

  • Merge first patchbomb from Andrew Morton:

    - a few misc things

    - ocfs2 udpates

    - kernel/watchdog.c feature work (took ages to get right)

    - most of MM. A few tricky bits are held up and probably won't make 4.2.

    * emailed patches from Andrew Morton : (91 commits)
    mm: kmemleak_alloc_percpu() should follow the gfp from per_alloc()
    mm, thp: respect MPOL_PREFERRED policy with non-local node
    tmpfs: truncate prealloc blocks past i_size
    mm/memory hotplug: print the last vmemmap region at the end of hot add memory
    mm/mmap.c: optimization of do_mmap_pgoff function
    mm: kmemleak: optimise kmemleak_lock acquiring during kmemleak_scan
    mm: kmemleak: avoid deadlock on the kmemleak object insertion error path
    mm: kmemleak: do not acquire scan_mutex in kmemleak_do_cleanup()
    mm: kmemleak: fix delete_object_*() race when called on the same memory block
    mm: kmemleak: allow safe memory scanning during kmemleak disabling
    memcg: convert mem_cgroup->under_oom from atomic_t to int
    memcg: remove unused mem_cgroup->oom_wakeups
    frontswap: allow multiple backends
    x86, mirror: x86 enabling - find mirrored memory ranges
    mm/memblock: allocate boot time data structures from mirrored memory
    mm/memblock: add extra "flags" to memblock to allow selection of memory based on attribute
    mm: do not ignore mapping_gfp_mask in page cache allocation paths
    mm/cma.c: fix typos in comments
    mm/oom_kill.c: print points as unsigned int
    mm/hugetlb: handle races in alloc_huge_page and hugetlb_reserve_pages
    ...

    Linus Torvalds
     
  • page_cache_read, do_generic_file_read, __generic_file_splice_read and
    __ntfs_grab_cache_pages currently ignore mapping_gfp_mask when calling
    add_to_page_cache_lru which might cause recursion into fs down in the
    direct reclaim path if the mapping really relies on GFP_NOFS semantic.

    This doesn't seem to be the case now because page_cache_read (page fault
    path) doesn't seem to suffer from the reclaim recursion issues and
    do_generic_file_read and __generic_file_splice_read also shouldn't be
    called under fs locks which would deadlock in the reclaim path. Anyway it
    is better to obey mapping gfp mask and prevent from later breakage.

    [akpm@linux-foundation.org: coding-style fixes]
    Signed-off-by: Michal Hocko
    Cc: Dave Chinner
    Cc: Neil Brown
    Cc: Johannes Weiner
    Cc: Al Viro
    Cc: Mel Gorman
    Cc: Rik van Riel
    Cc: Tetsuo Handa
    Cc: Anton Altaparmakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Michal Hocko
     

25 May, 2015

1 commit


06 May, 2015

1 commit

  • Using sendfile with below small program to get MD5 sums of some files,
    it appear that big files (over 64kbytes with 4k pages system) get a
    wrong MD5 sum while small files get the correct sum.
    This program uses sendfile() to send a file to an AF_ALG socket
    for hashing.

    /* md5sum2.c */
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include

    int main(int argc, char **argv)
    {
    int sk = socket(AF_ALG, SOCK_SEQPACKET, 0);
    struct stat st;
    struct sockaddr_alg sa = {
    .salg_family = AF_ALG,
    .salg_type = "hash",
    .salg_name = "md5",
    };
    int n;

    bind(sk, (struct sockaddr*)&sa, sizeof(sa));

    for (n = 1; n < argc; n++) {
    int size;
    int offset = 0;
    char buf[4096];
    int fd;
    int sko;
    int i;

    fd = open(argv[n], O_RDONLY);
    sko = accept(sk, NULL, 0);
    fstat(fd, &st);
    size = st.st_size;
    sendfile(sko, fd, &offset, size);
    size = read(sko, buf, sizeof(buf));
    for (i = 0; i < size; i++)
    printf("%2.2x", buf[i]);
    printf(" %s\n", argv[n]);
    close(fd);
    close(sko);
    }
    exit(0);
    }

    Test below is done using official linux patch files. First result is
    with a software based md5sum. Second result is with the program above.

    root@vgoip:~# ls -l patch-3.6.*
    -rw-r--r-- 1 root root 64011 Aug 24 12:01 patch-3.6.2.gz
    -rw-r--r-- 1 root root 94131 Aug 24 12:01 patch-3.6.3.gz

    root@vgoip:~# md5sum patch-3.6.*
    b3ffb9848196846f31b2ff133d2d6443 patch-3.6.2.gz
    c5e8f687878457db77cb7158c38a7e43 patch-3.6.3.gz

    root@vgoip:~# ./md5sum2 patch-3.6.*
    b3ffb9848196846f31b2ff133d2d6443 patch-3.6.2.gz
    5fd77b24e68bb24dcc72d6e57c64790e patch-3.6.3.gz

    After investivation, it appears that sendfile() sends the files by blocks
    of 64kbytes (16 times PAGE_SIZE). The problem is that at the end of each
    block, the SPLICE_F_MORE flag is missing, therefore the hashing operation
    is reset as if it was the end of the file.

    This patch adds SPLICE_F_MORE to the flags when more data is pending.

    With the patch applied, we get the correct sums:

    root@vgoip:~# md5sum patch-3.6.*
    b3ffb9848196846f31b2ff133d2d6443 patch-3.6.2.gz
    c5e8f687878457db77cb7158c38a7e43 patch-3.6.3.gz

    root@vgoip:~# ./md5sum2 patch-3.6.*
    b3ffb9848196846f31b2ff133d2d6443 patch-3.6.2.gz
    c5e8f687878457db77cb7158c38a7e43 patch-3.6.3.gz

    Signed-off-by: Christophe Leroy
    Signed-off-by: Jens Axboe

    Christophe Leroy
     

16 Apr, 2015

1 commit

  • The original dax patchset split the ext2/4_file_operations because of the
    two NULL splice_read/splice_write in the dax case.

    In the vfs if splice_read/splice_write are NULL we then call
    default_splice_read/write.

    What we do here is make generic_file_splice_read aware of IS_DAX() so the
    original ext2/4_file_operations can be used as is.

    For write it appears that iter_file_splice_write is just fine. It uses
    the regular f_op->write(file,..) or new_sync_write(file, ...).

    Signed-off-by: Boaz Harrosh
    Reviewed-by: Jan Kara
    Cc: Dave Chinner
    Cc: Matthew Wilcox
    Cc: Hugh Dickins
    Cc: Mel Gorman
    Cc: Kirill A. Shutemov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Boaz Harrosh
     

12 Apr, 2015

1 commit


26 Mar, 2015

1 commit


29 Jan, 2015

2 commits


24 Oct, 2014

1 commit


12 Jun, 2014

4 commits


28 May, 2014

1 commit

  • Commit 6130f5315ee8 "switch vmsplice_to_user() to copy_page_to_iter()" in
    v3.15-rc1 broke vmsplice(2).

    This patch fixes two bugs:

    - count is not initialized to a proper value, which resulted in no data
    being copied

    - if rw_copy_check_uvector() returns negative then the iov might be leaked.

    Tested OK.

    Signed-off-by: Miklos Szeredi
    Signed-off-by: Al Viro

    Miklos Szeredi
     

07 May, 2014

1 commit

  • For now, just use the same thing we pass to ->direct_IO() - it's all
    iovec-based at the moment. Pass it explicitly to iov_iter_init() and
    account for kvec vs. iovec in there, by the same kludge NFS ->direct_IO()
    uses.

    Signed-off-by: Al Viro

    Al Viro
     

02 Apr, 2014

2 commits


23 Jan, 2014

1 commit

  • Having this struct in module memory could Oops when if the module is
    unloaded while the buffer still persists in a pipe.

    Since sock_pipe_buf_ops is essentially the same as fuse_dev_pipe_buf_steal
    merge them into nosteal_pipe_buf_ops (this is the same as
    default_pipe_buf_ops except stealing the page from the buffer is not
    allowed).

    Reported-by: Al Viro
    Signed-off-by: Miklos Szeredi
    Cc: stable@vger.kernel.org

    Miklos Szeredi
     

25 Oct, 2013

1 commit


04 Jul, 2013

1 commit

  • Pull second set of VFS changes from Al Viro:
    "Assorted f_pos race fixes, making do_splice_direct() safe to call with
    i_mutex on parent, O_TMPFILE support, Jeff's locks.c series,
    ->d_hash/->d_compare calling conventions changes from Linus, misc
    stuff all over the place."

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (63 commits)
    Document ->tmpfile()
    ext4: ->tmpfile() support
    vfs: export lseek_execute() to modules
    lseek_execute() doesn't need an inode passed to it
    block_dev: switch to fixed_size_llseek()
    cpqphp_sysfs: switch to fixed_size_llseek()
    tile-srom: switch to fixed_size_llseek()
    proc_powerpc: switch to fixed_size_llseek()
    ubi/cdev: switch to fixed_size_llseek()
    pci/proc: switch to fixed_size_llseek()
    isapnp: switch to fixed_size_llseek()
    lpfc: switch to fixed_size_llseek()
    locks: give the blocked_hash its own spinlock
    locks: add a new "lm_owner_key" lock operation
    locks: turn the blocked_list into a hashtable
    locks: convert fl_link to a hlist_node
    locks: avoid taking global lock if possible when waking up blocked waiters
    locks: protect most of the file_lock handling with i_lock
    locks: encapsulate the fl_link list handling
    locks: make "added" in __posix_lock_file a bool
    ...

    Linus Torvalds
     

29 Jun, 2013

3 commits


24 Jun, 2013

1 commit


20 Jun, 2013

1 commit


02 May, 2013

1 commit

  • Pull VFS updates from Al Viro,

    Misc cleanups all over the place, mainly wrt /proc interfaces (switch
    create_proc_entry to proc_create(), get rid of the deprecated
    create_proc_read_entry() in favor of using proc_create_data() and
    seq_file etc).

    7kloc removed.

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (204 commits)
    don't bother with deferred freeing of fdtables
    proc: Move non-public stuff from linux/proc_fs.h to fs/proc/internal.h
    proc: Make the PROC_I() and PDE() macros internal to procfs
    proc: Supply a function to remove a proc entry by PDE
    take cgroup_open() and cpuset_open() to fs/proc/base.c
    ppc: Clean up scanlog
    ppc: Clean up rtas_flash driver somewhat
    hostap: proc: Use remove_proc_subtree()
    drm: proc: Use remove_proc_subtree()
    drm: proc: Use minor->index to label things, not PDE->name
    drm: Constify drm_proc_list[]
    zoran: Don't print proc_dir_entry data in debug
    reiserfs: Don't access the proc_dir_entry in r_open(), r_start() r_show()
    proc: Supply an accessor for getting the data from a PDE's parent
    airo: Use remove_proc_subtree()
    rtl8192u: Don't need to save device proc dir PDE
    rtl8187se: Use a dir under /proc/net/r8180/
    proc: Add proc_mkdir_data()
    proc: Move some bits from linux/proc_fs.h to linux/{of.h,signal.h,tty.h}
    proc: Move PDE_NET() to fs/proc/proc_net.c
    ...

    Linus Torvalds
     

01 May, 2013

1 commit

  • Pull compat cleanup from Al Viro:
    "Mostly about syscall wrappers this time; there will be another pile
    with patches in the same general area from various people, but I'd
    rather push those after both that and vfs.git pile are in."

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal:
    syscalls.h: slightly reduce the jungles of macros
    get rid of union semop in sys_semctl(2) arguments
    make do_mremap() static
    sparc: no need to sign-extend in sync_file_range() wrapper
    ppc compat wrappers for add_key(2) and request_key(2) are pointless
    x86: trim sys_ia32.h
    x86: sys32_kill and sys32_mprotect are pointless
    get rid of compat_sys_semctl() and friends in case of ARCH_WANT_OLD_COMPAT_IPC
    merge compat sys_ipc instances
    consolidate compat lookup_dcookie()
    convert vmsplice to COMPAT_SYSCALL_DEFINE
    switch getrusage() to COMPAT_SYSCALL_DEFINE
    switch epoll_pwait to COMPAT_SYSCALL_DEFINE
    convert sendfile{,64} to COMPAT_SYSCALL_DEFINE
    switch signalfd{,4}() to COMPAT_SYSCALL_DEFINE
    make SYSCALL_DEFINE-generated wrappers do asmlinkage_protect
    make HAVE_SYSCALL_WRAPPERS unconditional
    consolidate cond_syscall and SYSCALL_ALIAS declarations
    teach SYSCALL_DEFINE how to deal with long long/unsigned long long
    get rid of duplicate logics in __SC_....[1-6] definitions

    Linus Torvalds
     

10 Apr, 2013

5 commits


22 Mar, 2013

1 commit

  • default_file_splice_from() ends up calling vfs_write() (via very convoluted
    callchain). It's an overkill, since we already have done rw_verify_area()
    in the caller by the time we call vfs_write() we are under set_fs(KERNEL_DS),
    so access_ok() is also pointless. Add a new helper (__kernel_write()),
    use it instead of kernel_write() in there.

    Signed-off-by: Al Viro

    Al Viro
     

04 Mar, 2013

1 commit


26 Feb, 2013

1 commit


23 Feb, 2013

1 commit


07 Jan, 2013

1 commit

  • commit 35f9c09fe9c72e (tcp: tcp_sendpages() should call tcp_push() once)
    added an internal flag : MSG_SENDPAGE_NOTLAST meant to be set on all
    frags but the last one for a splice() call.

    The condition used to set the flag in pipe_to_sendpage() relied on
    splice() user passing the exact number of bytes present in the pipe,
    or a smaller one.

    But some programs pass an arbitrary high value, and the test fails.

    The effect of this bug is a lack of tcp_push() at the end of a
    splice(pipe -> socket) call, and possibly very slow or erratic TCP
    sessions.

    We should both test sd->total_len and fact that another fragment
    is in the pipe (pipe->nrbufs > 1)

    Many thanks to Willy for providing very clear bug report, bisection
    and test programs.

    Reported-by: Willy Tarreau
    Bisected-by: Willy Tarreau
    Tested-by: Willy Tarreau
    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     

12 Dec, 2012

1 commit


27 Sep, 2012

1 commit