1. 25 Jan, 2008 40 commits
    • Bartlomiej Zolnierkiewicz's avatar
      ide: use do_rw_taskfile() in flagged_taskfile() · 74095a91
      Bartlomiej Zolnierkiewicz authored
      Based on the earlier work by Tejun Heo.
      
      * Move setting IDE_TFLAG_LBA48 taskfile flag from do_rw_taskfile()
        function to the callers.
      
      * Add IDE_TFLAG_FLAGGED taskfile flag for flagged taskfiles coming
        from ide_taskfile_ioctl().  Check it instead of ->tf_out_flags.all.
      
      * Add IDE_TFLAG_OUT_DATA taskfile flag to indicate the need to load
        IDE data register in ide_tf_load().
      
      * Add IDE_TFLAG_OUT_* taskfile flags to indicate the need to load
        particular IDE taskfile registers in ide_tf_load().
      
      * Update do_rw_taskfile() and ide_tf_load() users to set respective
        IDE_TFLAG_OUT_* taksfile flags.
      
      * Add task_dma_ok() helper.
      
      * Use IDE_TFLAG_FLAGGED taskfile flag to select HIHI mask in ide_tf_load().
      
      * Use do_rw_taskfile() in flagged_taskfile().
      
      * Remove no longer needed 'tf_out_flags' field from ide_task_t.
      
      There should be no functionality changes caused by this patch.
      
      Cc: Tejun Heo <htejun@gmail.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      74095a91
    • Bartlomiej Zolnierkiewicz's avatar
      ide: add ide_no_data_taskfile() helper · 9a3c49be
      Bartlomiej Zolnierkiewicz authored
      * Add ide_no_data_taskfile() helper and convert ide_raw_taskfile() w/ NO DATA
        protocol users to use it instead.
      
      * Set ->data_phase explicitly in ide_no_data_taskfile()
        (TASKFILE_NO_DATA is defined as 0x0000).
      
      * Unexport task_no_data_intr().
      Acked-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      9a3c49be
    • Bartlomiej Zolnierkiewicz's avatar
      ide: add ide_tf_load() helper · 9e42237f
      Bartlomiej Zolnierkiewicz authored
      Based on the earlier work by Tejun Heo.
      
      * Add 'tf_flags' field (for taskfile flags) to ide_task_t.
      
      * Add IDE_TFLAG_LBA48 taskfile flag for LBA48 taskfiles.
      
      * Add IDE_TFLAG_NO_SELECT_MASK taskfile flag for __ide_do_rw_disk()
        which doesn't use SELECT_MASK() (looks like a bug but it requires
        some more investigation).
      
      * Split off ide_tf_load() helper from do_rw_taskfile().
      
      * Convert __ide_do_rw_disk() to use ide_tf_load().
      
      There should be no functionality changes caused by this patch.
      
      Cc: Tejun Heo <htejun@gmail.com>
      Acked-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      9e42237f
    • Bartlomiej Zolnierkiewicz's avatar
      ide-disk: use struct ide_taskfile in __ide_do_rw_disk() · 2bd06b23
      Bartlomiej Zolnierkiewicz authored
      Based on the earlier work by Tejun Heo.
      
      There should be no functionality changes caused by this patch.
      
      Cc: Tejun Heo <htejun@gmail.com>
      Acked-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      2bd06b23
    • Bartlomiej Zolnierkiewicz's avatar
      ide-disk: fix taskfile registers loading order in __ide_do_rw_disk() · d00e42dd
      Bartlomiej Zolnierkiewicz authored
      Load IDE_SECTOR_REG after IDE_FEATURE_REG and IDE_NSECTOR_REG when using CHS.
      
      This patch is basically a preparation for the next one which converts
      __ide_do_rw_disk() to use struct ide_taskfile.
      
      It shouldn't affect anything (just a usual paranoia to separate changes
      which change the way in which hardware is accessed from code cleanups).
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      d00e42dd
    • Bartlomiej Zolnierkiewicz's avatar
      ide-disk: merge LBA28 and LBA48 Host Protected Area support code (take 2) · 7a3b7512
      Bartlomiej Zolnierkiewicz authored
      * Merge idedisk_{read_native,set}_max_address_ext() into
        idedisk_{read_native,set}_max_address().
      
      v2:
      * Remove LBA48 code leftover from idedisk_read_native_max_address()
        ('high' variable initialization).  (Noticed by Sergei).
      
      There should be no functionality changes caused by this patch.
      Acked-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      7a3b7512
    • Bartlomiej Zolnierkiewicz's avatar
      ide: add struct ide_taskfile (take 2) · 650d841d
      Bartlomiej Zolnierkiewicz authored
      * Don't set write-only ide_task_t.hobRegister[6] and ide_task_t.hobRegister[7]
        in idedisk_set_max_address_ext().
      
      * Add struct ide_taskfile and use it in ide_task_t instead of tfRegister[]
        and hobRegister[].
      
      * Remove no longer needed IDE_CONTROL_OFFSET_HOB define.
      
      * Add #ifndef/#endif __KERNEL__ around definitions of {task,hob}_struct_t.
      
      While at it:
      
      * Use ATA_LBA define for LBA bit (0x40) as suggested by Tejun Heo.
      
      v2:
      * Add missing newlines. (Noticed by Sergei)
      
      * Use ~ATA_LBA instead of 0xBF. (Noticed by Sergei)
      
      * Use unnamed unions for error/feature and status/command.
        (Suggested by Sergei).
      
      There should be no functionality changes caused by this patch.
      Acked-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Cc: Tejun Heo <htejun@gmail.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      650d841d
    • Bartlomiej Zolnierkiewicz's avatar
      ide: remove task_ioreg_t typedef (take 2) · cd2a2d96
      Bartlomiej Zolnierkiewicz authored
      Remove task_ioreg_t typedef from the kernel code (but leave it
      in <linux/hdreg.h> for #ifndef/#endif __KERNEL__ case).
      
      While at it also move sata_ioreg_t typedef under #ifndef/#endif __KERNEL__.
      
      v2:
      Remove name of the second parameter from ide_execute_command() declaration.
      (Noticed by Sergei).
      Acked-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      cd2a2d96
    • Bartlomiej Zolnierkiewicz's avatar
      ide: remove ->dma_master field from ide_hwif_t (take 5) · 1c029fd6
      Bartlomiej Zolnierkiewicz authored
      * Convert cmd64x, hpt366 and pdc202xx_old host drivers to use
        pci_resource_start(hwif->pci_dev, 4) instead of hwif->dma_master.
      
      * Remove no longer needed ->dma_master field from ide_hwif_t.
      
      v2:
      * Use the more readable 'hwif->dma_base - (hwif->channel * 8)' instead of
        pci_resource_start(hwif->pci_dev, 4).
      
      v3:
      * Use hwif->extra_base in hpt366/pdc20xx_old + some cosmetic fixups over v2
        (suggested by Sergei).
      
      v4:
      * Correct offsets in hpt3xxn_set_clock().
      
      v5:
      * Use hwif->extra_base in hpt366 for _real_ this time. (Noticed by Sergei)
      Acked-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Cc: Jeff Garzik <jeff@garzik.org>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      1c029fd6
    • Sergei Shtylyov's avatar
      hpt366: merge set_dma_mode() methods · 866664d7
      Sergei Shtylyov authored
      Group the array of pointers to the timing tables with the timing register masks
      which allows us to merge HPT36x/HPT37x set_dma_mode() methods into one.
      Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      866664d7
    • Sergei Shtylyov's avatar
      hpt366: kill set_dma_mode() method wrapper · a488f34e
      Sergei Shtylyov authored
      There's no reason to keep the set_dma_mode() method wrapper for two different
      chip families, so get rid of it...
      Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      a488f34e
    • Sergei Shtylyov's avatar
      hpt366: change timing register masks · ceb1b2c5
      Sergei Shtylyov authored
      Since PIO autotuning is now done always, there's no need anymore to program
      the taskfile timings also on DMA modes, so change the IDE timing register
      masks accordingly, "inverting the polarity" of the masks while at it...
      Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      ceb1b2c5
    • Aristeu Rozanski's avatar
      ide-io: set REQ_FAILED when drive is dead · b5e1a4e2
      Aristeu Rozanski authored
      Currently it's possible to ide-cd to set an incorrect blocksize by
      reading garbage if the drive is dead:
      
      ide_cd_probe()
       -> cdrom_read_toc()
           -> cdrom_read_capacity()
               -> cdrom_queue_packet_command()
                   -> ide_do_drive_cmd()
                       -> ide_do_request()
                           -> start_request()
      
      on start_request():
      
              /* bail early if we've exceeded max_failures */
              if (drive->max_failures && (drive->failures > drive->max_failures)) {
                      goto kill_rq;
              }
      (...)
      kill_rq:
              ide_kill_rq(drive, rq);
              return ide_stopped;
      
      ide_kill_rq() and the next calls won't set REQ_FAILED on rq->cmd_flags and thus
      cdrom_queue_packet_command() won't return an error. then:
      
              stat = cdrom_queue_packet_command(drive, &req);
              if (stat == 0) {
                      *capacity = 1 + be32_to_cpu(capbuf.lba);
                      *sectors_per_frame =
                              be32_to_cpu(capbuf.blocklen) >> SECTOR_BITS;
              }
      
      cdrom_read_capacity() ends believing capbuf is valid but in fact it's just
      uninitialized data. back to cdrom_read_toc():
      
              /* Try to get the total cdrom capacity and sector size. */
              stat = cdrom_read_capacity(drive, &toc->capacity, &sectors_per_frame,
                                         sense);
              if (stat)
                      toc->capacity = 0x1fffff;
      
              set_capacity(info->disk, toc->capacity * sectors_per_frame);
              /* Save a private copy of te TOC capacity for error handling */
              drive->probed_capacity = toc->capacity * sectors_per_frame;
      
              blk_queue_hardsect_size(drive->queue,
                                      sectors_per_frame << SECTOR_BITS);
      
      that will set drive->queue->hardsect_size to be the random value.
      hardsect_size is used to calculate inode->i_blkbits. later on, on a read
      path:
      
      void create_empty_buffers(struct page *page,
                              unsigned long blocksize, unsigned long b_state)
      {       
              struct buffer_head *bh, *head, *tail;
      
              head = alloc_page_buffers(page, blocksize, 1);
              bh = head;
              do {    
                      bh->b_state |= b_state;
                      tail = bh;
                      bh = bh->b_this_page;
              } while (bh);
              tail->b_this_page = head;
      
      alloc_page_buffers() will return NULL if blocksize > 4096. blocksize is
      calculed based on inode->i_blkbits. that will trigger a null
      dereference on create_empty_buffers().
      Signed-off-by: default avatarAristeu Rozanski <arozansk@redhat.com>
      Cc: Borislav Petkov <bbpetkov@yahoo.de>
      Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
      b5e1a4e2
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/selinux-2.6 · b47711bf
      Linus Torvalds authored
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/selinux-2.6:
        selinux: make mls_compute_sid always polyinstantiate
        security/selinux: constify function pointer tables and fields
        security: add a secctx_to_secid() hook
        security: call security_file_permission from rw_verify_area
        security: remove security_sb_post_mountroot hook
        Security: remove security.h include from mm.h
        Security: remove security_file_mmap hook sparse-warnings (NULL as 0).
        Security: add get, set, and cloning of superblock security information
        security/selinux: Add missing "space"
      b47711bf
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hskinnemoen/avr32-2.6 · 7556afa0
      Linus Torvalds authored
      * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hskinnemoen/avr32-2.6:
        [AVR32] extint: Set initial irq type to low level
        [AVR32] extint: change set_irq_type() handling
        [AVR32] NMI debugging
        [AVR32] constify function pointer tables
        [AVR32] ATNGW100: Update defconfig
        [AVR32] ATSTK1002: Update defconfig
        [AVR32] Kconfig: Choose daughterboard instead of CPU
        [AVR32] Add support for ATSTK1003 and ATSTK1004
        [AVR32] Clean up external DAC setup code
        [AVR32] ATSTK1000: Move gpio-leds setup to setup.c
        [AVR32] Add support for AT32AP7001 and AT32AP7002
        [AVR32] Provide more CPU information in /proc/cpuinfo and dmesg
        [AVR32] Oprofile support
        [AVR32] Include instrumentation menu
        Disable VGA text console for AVR32 architecture
        [AVR32] Enable debugging only when needed
        ptrace: Call arch_ptrace_attach() when request=PTRACE_TRACEME
        [AVR32] Remove redundant try_to_freeze() call from do_signal()
        [AVR32] Drop GFP_COMP for DMA memory allocations
      7556afa0
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw · e07dd2ad
      Linus Torvalds authored
      * git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw: (56 commits)
        [GFS2] Allow journal recovery on read-only mount
        [GFS2] Lockup on error
        [GFS2] Fix page_mkwrite truncation race path
        [GFS2] Fix typo
        [GFS2] Fix write alloc required shortcut calculation
        [GFS2] gfs2_alloc_required performance
        [GFS2] Remove unneeded i_spin
        [GFS2] Reduce inode size by moving i_alloc out of line
        [GFS2] Fix assert in log code
        [GFS2] Fix problems relating to execution of files on GFS2
        [GFS2] Initialize extent_list earlier
        [GFS2] Allow page migration for writeback and ordered pages
        [GFS2] Remove unused variable
        [GFS2] Fix log block mapper
        [GFS2] Minor correction
        [GFS2] Eliminate the no longer needed sd_statfs_mutex
        [GFS2] Incremental patch to fix compiler warning
        [GFS2] Function meta_read optimization
        [GFS2] Only fetch the dinode once in block_map
        [GFS2] Reorganize function gfs2_glmutex_lock
        ...
      e07dd2ad
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 · eba0e319
      Linus Torvalds authored
      * git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6: (125 commits)
        [CRYPTO] twofish: Merge common glue code
        [CRYPTO] hifn_795x: Fixup container_of() usage
        [CRYPTO] cast6: inline bloat--
        [CRYPTO] api: Set default CRYPTO_MINALIGN to unsigned long long
        [CRYPTO] tcrypt: Make xcbc available as a standalone test
        [CRYPTO] xcbc: Remove bogus hash/cipher test
        [CRYPTO] xcbc: Fix algorithm leak when block size check fails
        [CRYPTO] tcrypt: Zero axbuf in the right function
        [CRYPTO] padlock: Only reset the key once for each CBC and ECB operation
        [CRYPTO] api: Include sched.h for cond_resched in scatterwalk.h
        [CRYPTO] salsa20-asm: Remove unnecessary dependency on CRYPTO_SALSA20
        [CRYPTO] tcrypt: Add select of AEAD
        [CRYPTO] salsa20: Add x86-64 assembly version
        [CRYPTO] salsa20_i586: Salsa20 stream cipher algorithm (i586 version)
        [CRYPTO] gcm: Introduce rfc4106
        [CRYPTO] api: Show async type
        [CRYPTO] chainiv: Avoid lock spinning where possible
        [CRYPTO] seqiv: Add select AEAD in Kconfig
        [CRYPTO] scatterwalk: Handle zero nbytes in scatterwalk_map_and_copy
        [CRYPTO] null: Allow setkey on digest_null 
        ...
      eba0e319
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6 · df8dc74e
      Linus Torvalds authored
      This can be broken down into these major areas:
       - Documentation updates (language translations and fixes, as
         well as kobject and kset documenatation updates.)
       - major kset/kobject/ktype rework and fixes.  This cleans up the
         kset and kobject and ktype relationship and architecture,
         making sense of things now, and good documenation and samples
         are provided for others to use.  Also the attributes for
         kobjects are much easier to handle now.  This cleaned up a LOT
         of code all through the kernel, making kobjects easier to use
         if you want to.
       - struct bus_type has been reworked to now handle the lifetime
         rules properly, as the kobject is properly dynamic.
       - struct driver has also been reworked, and now the lifetime
         issues are resolved.
       - the block subsystem has been converted to use struct device
         now, and not "raw" kobjects.  This patch has been in the -mm
         tree for over a year now, and finally all the issues are
         worked out with it.  Older distros now properly work with new
         kernels, and no userspace updates are needed at all.
       - nozomi driver is added.  This has also been in -mm for a long
         time, and many people have asked for it to go in.  It is now
         in good enough shape to do so.
       - lots of class_device conversions to use struct device instead.
         The tree is almost all cleaned up now, only SCSI and IB is the
         remaining code to fix up...
      
      * git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6: (196 commits)
        Driver core: coding style fixes
        Kobject: fix coding style issues in kobject c files
        Kobject: fix coding style issues in kobject.h
        Driver core: fix coding style issues in device.h
        spi: use class iteration api
        scsi: use class iteration api
        rtc: use class iteration api
        power supply : use class iteration api
        ieee1394: use class iteration api
        Driver Core: add class iteration api
        Driver core: Cleanup get_device_parent() in device_add() and device_move()
        UIO: constify function pointer tables
        Driver Core: constify the name passed to platform_device_register_simple
        driver core: fix build with SYSFS=n
        sysfs: make SYSFS_DEPRECATED depend on SYSFS
        Driver core: use LIST_HEAD instead of call to INIT_LIST_HEAD in __init
        kobject: add sample code for how to use ksets/ktypes/kobjects
        kobject: add sample code for how to use kobjects in a simple manner.
        kobject: update the kobject/kset documentation
        kobject: remove old, outdated documentation.
        ...
      df8dc74e
    • Pekka Enberg's avatar
      slab: fix bootstrap on memoryless node · 556a169d
      Pekka Enberg authored
      If the node we're booting on doesn't have memory, bootstrapping kmalloc()
      caches resorts to fallback_alloc() which requires ->nodelists set for all
      nodes.  Fix that by calling set_up_list3s() for CACHE_CACHE in
      kmem_cache_init().
      
      As kmem_getpages() is called with GFP_THISNODE set, this used to work before
      because of breakage in 2.6.22 and before with GFP_THISNODE returning pages from
      the wrong node if a node had no memory. So it may have worked accidentally and
      in an unsafe manner because the pages would have been associated with the wrong
      node which could trigger bug ons and locking troubles.
      Tested-by: default avatarMel Gorman <mel@csn.ul.ie>
      Tested-by: default avatarOlaf Hering <olaf@aepfle.de>
      Reviewed-by: default avatarChristoph Lameter <clameter@sgi.com>
      Signed-off-by: default avatarPekka Enberg <penberg@cs.helsinki.fi>
      [ With additional one-liner by Olaf Hering  - Linus ]
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      556a169d
    • Karsten Keil's avatar
      fix oops on rmmod capidrv · eb36f4fc
      Karsten Keil authored
      Fix overwriting the stack with the version string
      (it is currently 10 bytes + zero) when unloading the
      capidrv module. Safeguard against overwriting it
      should the version string grow in the future.
      
      Should fix Kernel Bug Tracker Bug 9696.
      Signed-off-by: default avatarGerd v. Egidy <gerd.von.egidy@intra2net.com>
      Acked-by: default avatarKarsten Keil <kkeil@suse.de>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      eb36f4fc
    • Abhijith Das's avatar
      [GFS2] Allow journal recovery on read-only mount · 7bc5c414
      Abhijith Das authored
      This patch allows gfs2 to perform journal recovery even if it is mounted
      read-only. Strictly speaking, a read-only mount should not be writing to
      the filesystem, but we do this only to perform journal recovery. A
      read-only mount will fail if we don't recover the dirty journal. Also,
      when gfs2 is used as a root filesystem, it will be mounted read-only
      before being mounted read-write during the boot sequence. A failed
      read-only mount will panic the machine during bootup.
      Signed-off-by: default avatarAbhijith Das <adas@redhat.com>
      Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
      7bc5c414
    • Bob Peterson's avatar
      [GFS2] Lockup on error · 1b8177ec
      Bob Peterson authored
      I spotted this bug while I was digging around.  Looks like it could cause
      a lockup in some rare error condition.
      Signed-off-by: default avatarBob Peterson <rpeterso@redhat.com>
      Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
      1b8177ec
    • Steven Whitehouse's avatar
      [GFS2] Fix page_mkwrite truncation race path · b7fe2e39
      Steven Whitehouse authored
      There was a bug in the truncation/invalidation race path for
      ->page_mkwrite for gfs2. It ought to return 0 so that the effect is the
      same as if the page was truncated at any of the other points at which
      the page_lock is dropped. This will result in the restart of the whole
      page fault path. If it was due to a real truncation (as opposed to an
      invalidate because we let a glock go) then the ->fault path will pick
      that up when it gets called again.
      Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
      b7fe2e39
    • Bob Peterson's avatar
      [GFS2] Fix typo · 3e5cd087
      Bob Peterson authored
      This patch fixes a minor typo.  Surprisingly, it still compiled.
      Signed-off-by: default avatarBob Peterson <rpeterso@redhat.com>
      Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
      3e5cd087
    • Steven Whitehouse's avatar
      [GFS2] Fix write alloc required shortcut calculation · 1af53572
      Steven Whitehouse authored
      The comparison was being made against the wrong quantity.
      Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
      1af53572
    • Bob Peterson's avatar
      [GFS2] gfs2_alloc_required performance · 05220535
      Bob Peterson authored
      This is a small I/O performance enhancement to gfs2.  (Actually, it is a rework of
      an earlier version I got wrong).  The idea here is to check if the write extends
      past the last block in the file.  If so, the function can save itself a lot of
      time and trouble because it knows an allocate will be required.  Benchmarks like
      iozone should see better performance.
      Signed-off-by: default avatarBob Peterson <rpeterso@redhat.com>
      Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
      05220535
    • Bob Peterson's avatar
      [GFS2] Remove unneeded i_spin · 598278bd
      Bob Peterson authored
      This patch removes a vestigial variable "i_spin" from the gfs2_inode
      structure.  This not only saves us memory (>300000 of these in memory
      for the oom test) it also saves us time because we don't have to
      spend time initializing it (i.e. slightly better performance).
      Signed-off-by: default avatarBob Peterson <rpeterso@redhat.com>
      Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
      598278bd
    • Steven Whitehouse's avatar
      [GFS2] Reduce inode size by moving i_alloc out of line · 6dbd8224
      Steven Whitehouse authored
      It is possible to reduce the size of GFS2 inodes by taking the i_alloc
      structure out of the gfs2_inode. This patch allocates the i_alloc
      structure whenever its needed, and frees it afterward. This decreases
      the amount of low memory we use at the expense of requiring a memory
      allocation for each page or partial page that we write. A quick test
      with postmark shows that the overhead is not measurable and I also note
      that OCFS2 use the same approach.
      
      In the future I'd like to solve the problem by shrinking down the size
      of the members of the i_alloc structure, but for now, this reduces the
      immediate problem of using too much low-memory on x86 and doesn't add
      too much overhead.
      Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
      6dbd8224
    • Steven Whitehouse's avatar
      [GFS2] Fix assert in log code · ac39aadd
      Steven Whitehouse authored
      Although the values were all being calculated correctly, there was a
      race in the assert due to the way it was using atomic variables. This
      changes the value we assert on so that we get the same effect by testing
      a different variable. This prevents the assert triggering when it shouldn't.
      Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
      ac39aadd
    • Steven Whitehouse's avatar
      [GFS2] Fix problems relating to execution of files on GFS2 · 9656b2c1
      Steven Whitehouse authored
      This patch fixes a couple of problems which affected the execution of files
      on GFS2. The first is that there was a corner case where inodes were not
      always uptodate at the point at which permissions checks were being carried
      out, this was resulting in refusal of execute permission, but only on the
      first lookup, subsequent requests worked correctly. The second was a problem
      relating to incorrect updating of file sizes which was introduced with the
      write_begin/end code for GFS2 a little while back.
      Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
      Cc: Abhijith Das <adas@redhat.com>
      9656b2c1
    • Bob Peterson's avatar
      [GFS2] Initialize extent_list earlier · 0811a127
      Bob Peterson authored
      Here is a patch for the latest upstream GFS2 code:
      The journal extent map needs to be initialized sooner than it
      currently is.  Otherwise failed mount attempts (e.g. not enough
      journals, etc.) may panic trying to access the uninitialized list.
      Signed-off-by: default avatarBob Peterson <rpeterso@redhat.com>
      Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
      0811a127
    • Steven Whitehouse's avatar
      [GFS2] Allow page migration for writeback and ordered pages · e5d9dc27
      Steven Whitehouse authored
      To improve performance on NUMA, we use the VM's standard page
      migration for writeback and ordered pages. Probably we could
      also do the same for journaled data, but that would need a
      careful audit of the code, so will be the subject of a later
      patch.
      Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
      e5d9dc27
    • Steven Whitehouse's avatar
      [GFS2] Remove unused variable · 65a62909
      Steven Whitehouse authored
      The go_drop_th function is never called or referenced.
      Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
      65a62909
    • Steven Whitehouse's avatar
      [GFS2] Fix log block mapper · ff91cc9b
      Steven Whitehouse authored
      A missing offset in the calculation.
      Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
      ff91cc9b
    • Bob Peterson's avatar
      [GFS2] Minor correction · fa3742fa
      Bob Peterson authored
      This is a small correction to my previously posted patch1.
      It just changes a divide to a shift.  It's faster and doesn't
      introduce odd dependencies on 32-bit compiles.
      Signed-off-by: default avatarBob Peterson <rpeterso@redhat.com>
      Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
      fa3742fa
    • Bob Peterson's avatar
      [GFS2] Eliminate the no longer needed sd_statfs_mutex · c3f60b6e
      Bob Peterson authored
      This patch eliminates the unneeded sd_statfs_mutex mutex but preserves
      the ordering as discussed.
      Signed-off-by: default avatarBob Peterson <rpeterso@redhat.com>
      Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
      c3f60b6e
    • Bob Peterson's avatar
    • Bob Peterson's avatar
      [GFS2] Function meta_read optimization · 15c7cee7
      Bob Peterson authored
      This patch optimizes function gfs2_meta_read.  Basically, gfs2_meta_wait
      was being called regardless of whether a disk read was requested.
      This just pulls that wait into the if that triggers the read.
      Signed-off-by: default avatarBob Peterson <rpeterso@redhat.com>
      Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
      15c7cee7
    • Bob Peterson's avatar
      [GFS2] Only fetch the dinode once in block_map · b0d5fd30
      Bob Peterson authored
      Function gfs2_block_map was often looking up the disk inode twice.
      This optimizes it so that only does it once.
      Signed-off-by: default avatarBob Peterson <rpeterso@redhat.com>
      Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
      b0d5fd30
    • Bob Peterson's avatar
      [GFS2] Reorganize function gfs2_glmutex_lock · 398bbe68
      Bob Peterson authored
      This patch optimizes the function gfs2_glmutex_lock.
      The basic theory is: Why bother initializing a holder, setting up
      wait bits and then waiting on them, if you know the glock can be
      yours.  So the holder stuff is placed inside the if checking if the
      glock is locked.  This one needs careful scrutiny because changing
      anything to do with locking should strike terror into one's heart.
      Signed-off-by: default avatarBob Peterson <rpeterso@redhat.com>
      Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
      398bbe68