1. 05 3月, 2009 1 次提交
  2. 29 12月, 2008 2 次提交
    • M
      loop: Do not call loop_unplug for not configured loop device. · 8ae30b89
      Milan Broz 提交于
      In loop_unplug() function is expected that mapping is set
      and lo->lo_backing_file is not NULL.
      
      Unfortunately loop_set_fd() set the request queue unplug function,
      but loop_clr_fd() doesn't clear that.
      
      Loop device allows open of non-configured loop in some situations.
      If the unplug on request queue is called, loop module oopses because
      of missing lo_backing_file.
      
      Simple reproducer:
      	losetup /dev/loop0 /xxx
      	losetup -d /dev/loop0
      	dmsetup create x --table "0 1 linear /dev/loop0 0"
      
       EIP is at loop_unplug+0x1d/0x3b
       ...
        Call Trace:
         blk_unplug+0x57/0x5e
         dm_table_unplug_all+0x34/0x77 [dm_mod]
         destroy_inode+0x27/0x38
         generic_delete_inode+0xd5/0xd9
         iput+0x4b/0x4e
         dm_resume+0xca/0xfe [dm_mod]
         dev_suspend+0x143/0x165 [dm_mod]
         dm_ctl_ioctl+0x18e/0x1cf [dm_mod]
         dev_suspend+0x0/0x165 [dm_mod]
         dm_ctl_ioctl+0x0/0x1cf [dm_mod]
         vfs_ioctl+0x22/0x69
         do_vfs_ioctl+0x39d/0x3c7
         trace_hardirqs_on+0xb/0xd
         remove_vma+0x50/0x56
         do_munmap+0x21c/0x237
         sys_ioctl+0x2c/0x45
         sysenter_do_call+0x12/0x31
      
      Several reports here
      http://www.kerneloops.org/search.php?search=loop_unplug
      
      Fix it by simply clear unplug function together with
      removing of backing file.
      Signed-off-by: NMilan Broz <mbroz@redhat.com>
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      8ae30b89
    • M
      loop: Flush possible running bios when loop device is released. · 14f27939
      Milan Broz 提交于
      When there are still queued bios and reference count
      drops to zero, loop device must flush all queued bios.
      
      Otherwise it can lead to situation that caller
      closes the device, but some bios are still running
      and endio() function call later OOpses when uses
      unallocated mempool.
      
      This happens for example when running dm-crypt over loop,
      here is typical oops backtrace:
      
       Oops: 0000 [#1] PREEMPT SMP
       EIP is at mempool_free+0x12/0x6b
      ...
       crypt_dec_pending+0x50/0x54 [dm_crypt]
       crypt_endio+0x9f/0xa7 [dm_crypt]
       crypt_endio+0x0/0xa7 [dm_crypt]
       bio_endio+0x2b/0x2e
       loop_thread+0x37a/0x3b1
       do_lo_send_aops+0x0/0x165
       autoremove_wake_function+0x0/0x33
       loop_thread+0x0/0x3b1
       kthread+0x3b/0x61
       kthread+0x0/0x61
       kernel_thread_helper+0x7/0x10
      
      (But crash is reproducible with different dm targets
      running over loop device too.)
      
      Patch fixes it by flushing the bios in release call,
      reusing the flush mechanism for switching backing store.
      Signed-off-by: NMilan Broz <mbroz@redhat.com>
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      14f27939
  3. 14 11月, 2008 1 次提交
  4. 31 10月, 2008 1 次提交
  5. 21 10月, 2008 3 次提交
    • A
      511de73f
    • A
      [PATCH] switch loop · bb214884
      Al Viro 提交于
      ioctl doesn't need BKL here
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      bb214884
    • A
      [PATCH] beginning of methods conversion · d4430d62
      Al Viro 提交于
      To keep the size of changesets sane we split the switch by drivers;
      to keep the damn thing bisectable we do the following:
      	1) rename the affected methods, add ones with correct
      prototypes, make (few) callers handle both.  That's this changeset.
      	2) for each driver convert to new methods.  *ALL* drivers
      are converted in this series.
      	3) kill the old (renamed) methods.
      
      Note that it _is_ a flagday; all in-tree drivers are converted and by the
      end of this series no trace of old methods remain.  The only reason why
      we do that this way is to keep the damn thing bisectable and allow per-driver
      debugging if anything goes wrong.
      
      New methods:
      	open(bdev, mode)
      	release(disk, mode)
      	ioctl(bdev, mode, cmd, arg)		/* Called without BKL */
      	compat_ioctl(bdev, mode, cmd, arg)
      	locked_ioctl(bdev, mode, cmd, arg)	/* Called with BKL, legacy */
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      d4430d62
  6. 29 4月, 2008 1 次提交
  7. 21 4月, 2008 1 次提交
    • L
      loop: manage partitions in disk image · 476a4813
      Laurent Vivier 提交于
      This patch allows to use loop device with partitionned disk image.
      
      Original behavior of loop is not modified.
      
      A new parameter is introduced to define how many partition we want to be
      able to manage per loop device. This parameter is "max_part".
      
      For instance, to manage 63 partitions / loop device, we will do:
      # modprobe loop max_part=63
      # ls -l /dev/loop?*
      brw-rw---- 1 root disk 7,   0 2008-03-05 14:55 /dev/loop0
      brw-rw---- 1 root disk 7,  64 2008-03-05 14:55 /dev/loop1
      brw-rw---- 1 root disk 7, 128 2008-03-05 14:55 /dev/loop2
      brw-rw---- 1 root disk 7, 192 2008-03-05 14:55 /dev/loop3
      brw-rw---- 1 root disk 7, 256 2008-03-05 14:55 /dev/loop4
      brw-rw---- 1 root disk 7, 320 2008-03-05 14:55 /dev/loop5
      brw-rw---- 1 root disk 7, 384 2008-03-05 14:55 /dev/loop6
      brw-rw---- 1 root disk 7, 448 2008-03-05 14:55 /dev/loop7
      
      And to attach a raw partitionned disk image, the original losetup is used:
      
      # losetup -f etch.img
      # ls -l /dev/loop?*
      brw-rw---- 1 root disk 7,   0 2008-03-05 14:55 /dev/loop0
      brw-rw---- 1 root disk 7,   1 2008-03-05 14:57 /dev/loop0p1
      brw-rw---- 1 root disk 7,   2 2008-03-05 14:57 /dev/loop0p2
      brw-rw---- 1 root disk 7,   5 2008-03-05 14:57 /dev/loop0p5
      brw-rw---- 1 root disk 7,  64 2008-03-05 14:55 /dev/loop1
      brw-rw---- 1 root disk 7, 128 2008-03-05 14:55 /dev/loop2
      brw-rw---- 1 root disk 7, 192 2008-03-05 14:55 /dev/loop3
      brw-rw---- 1 root disk 7, 256 2008-03-05 14:55 /dev/loop4
      brw-rw---- 1 root disk 7, 320 2008-03-05 14:55 /dev/loop5
      brw-rw---- 1 root disk 7, 384 2008-03-05 14:55 /dev/loop6
      brw-rw---- 1 root disk 7, 448 2008-03-05 14:55 /dev/loop7
      # mount /dev/loop0p1 /mnt
      # ls /mnt
      bench  cdrom  home        lib         mnt   root     srv  usr
      bin    dev    initrd      lost+found  opt   sbin     sys  var
      boot   etc    initrd.img  media       proc  selinux  tmp  vmlinuz
      # umount /mnt
      # losetup -d /dev/loop0
      
      Of course, the same behavior can be done using kpartx on a loop device,
      but modifying loop avoids to stack several layers of block device (loop +
      device mapper), this is a very light modification (40% of modifications
      are to manage the new parameter).
      Signed-off-by: NLaurent Vivier <Laurent.Vivier@bull.net>
      Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
      476a4813
  8. 07 2月, 2008 1 次提交
    • D
      Allow auto-destruction of loop devices · 96c58655
      David Woodhouse 提交于
      This allows a flag to be set on loop devices so that when they are
      closed for the last time, they'll self-destruct.
      
      In general, so that we can automatically allocate loop devices (as with
      losetup -f) and have them disappear when we're done with them.
      
      In particular, right now, so that we can stop relying on the hackish
      special-case in umount(8) which kills off loop devices which were set up by
      'mount -oloop'.  That means we can stop putting crap in /etc/mtab which
      doesn't belong there, which means it can be a symlink to /proc/mounts, which
      means yet another writable file on the root filesystem is eliminated and the
      'stateless' folks get happier...  and OLPC trac #356 can be closed.
      
      The mount(8) side of that is at
      http://marc.info/?l=util-linux-ng&m=119362955431694&w=2
      
      [akpm@linux-foundation.org: coding-style fixes]
      Signed-off-by: NDavid Woodhouse <dwmw2@infradead.org>
      Cc: Bernardo Innocenti <bernie@codewiz.org>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      96c58655
  9. 11 1月, 2008 1 次提交
  10. 20 10月, 2007 1 次提交
  11. 17 10月, 2007 3 次提交
  12. 10 10月, 2007 1 次提交
  13. 24 7月, 2007 1 次提交
  14. 18 7月, 2007 2 次提交
  15. 10 7月, 2007 3 次提交
  16. 09 6月, 2007 1 次提交
  17. 14 5月, 2007 1 次提交
    • A
      fix deadlock in loop.c · 705962cc
      Al Viro 提交于
      ... doh
      
      Jeremy Fitzhardinge noted that the recent loop.c cleanups worked, but
      cause lockdep to complain.
      
      Ouch.  OK, the deadlock is real and yes, I'm an idiot.  Speaking of which,
      we probably want to s/lock/pin/ in drivers/base/map.c to avoid such
      brainos again.  And yes, this stuff needs clear documentation.  Will try
      to put one together once I get some sleep...
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      Cc: Jeremy Fitzhardinge <jeremy@goop.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      705962cc
  18. 13 5月, 2007 1 次提交
  19. 10 5月, 2007 1 次提交
    • N
      fs: convert core functions to zero_user_page · 01f2705d
      Nate Diller 提交于
      It's very common for file systems to need to zero part or all of a page,
      the simplist way is just to use kmap_atomic() and memset().  There's
      actually a library function in include/linux/highmem.h that does exactly
      that, but it's confusingly named memclear_highpage_flush(), which is
      descriptive of *how* it does the work rather than what the *purpose* is.
      So this patchset renames the function to zero_user_page(), and calls it
      from the various places that currently open code it.
      
      This first patch introduces the new function call, and converts all the
      core kernel callsites, both the open-coded ones and the old
      memclear_highpage_flush() ones.  Following this patch is a series of
      conversions for each file system individually, per AKPM, and finally a
      patch deprecating the old call.  The diffstat below shows the entire
      patchset.
      
      [akpm@linux-foundation.org: fix a few things]
      Signed-off-by: NNate Diller <nate.diller@gmail.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      01f2705d
  20. 09 5月, 2007 1 次提交
    • K
      remove artificial software max_loop limit · 73285082
      Ken Chen 提交于
      Remove artificial maximum 256 loop device that can be created due to a
      legacy device number limit.  Searching through lkml archive, there are
      several instances where users complained about the artificial limit that
      the loop driver impose.  There is no reason to have such limit.
      
      This patch rid the limit entirely and make loop device and associated block
      queue instantiation on demand.  With on-demand instantiation, it also gives
      the benefit of not wasting memory if these devices are not in use (compare
      to current implementation that always create 8 loop devices), a net
      improvement in both areas.  This version is both tested with creation of
      large number of loop devices and is compatible with existing losetup/mount
      user land tools.
      
      There are a number of people who worked on this and provided valuable
      suggestions, in no particular order, by:
      
      Jens Axboe
      Jan Engelhardt
      Christoph Hellwig
      Thomas M
      Signed-off-by: NKen Chen <kenchen@google.com>
      Cc: Jan Engelhardt <jengelh@linux01.gwdg.de>
      Cc: Christoph Hellwig <hch@lst.de>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      73285082
  21. 08 5月, 2007 1 次提交
  22. 09 12月, 2006 1 次提交
  23. 11 10月, 2006 2 次提交
  24. 01 10月, 2006 1 次提交
  25. 30 9月, 2006 2 次提交
  26. 27 9月, 2006 1 次提交
  27. 01 7月, 2006 1 次提交
  28. 29 6月, 2006 1 次提交
  29. 27 6月, 2006 2 次提交