mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
Merge 4.2-rc6 into char-misc-next
We want the fixes in Linus's tree in here as well. Signed-off-by: Greg Kroah-Hartman <[email protected]>
This commit is contained in:
commit
5d44f4b348
459 changed files with 6088 additions and 2695 deletions
|
|
@ -259,7 +259,7 @@ config DM_CRYPT
|
|||
the ciphers you're going to use in the cryptoapi configuration.
|
||||
|
||||
For further information on dm-crypt and userspace tools see:
|
||||
<http://code.google.com/p/cryptsetup/wiki/DMCrypt>
|
||||
<https://gitlab.com/cryptsetup/cryptsetup/wikis/DMCrypt>
|
||||
|
||||
To compile this code as a module, choose M here: the module will
|
||||
be called dm-crypt.
|
||||
|
|
|
|||
|
|
@ -1686,7 +1686,7 @@ static struct dm_cache_policy *smq_create(dm_cblock_t cache_size,
|
|||
|
||||
if (from_cblock(cache_size)) {
|
||||
mq->cache_hit_bits = alloc_bitset(from_cblock(cache_size));
|
||||
if (!mq->cache_hit_bits && mq->cache_hit_bits) {
|
||||
if (!mq->cache_hit_bits) {
|
||||
DMERR("couldn't allocate cache hit bitset");
|
||||
goto bad_cache_hit_bits;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -424,6 +424,7 @@ static void free_migration(struct dm_cache_migration *mg)
|
|||
wake_up(&cache->migration_wait);
|
||||
|
||||
mempool_free(mg, cache->migration_pool);
|
||||
wake_worker(cache);
|
||||
}
|
||||
|
||||
static int prealloc_data_structs(struct cache *cache, struct prealloc *p)
|
||||
|
|
@ -1966,6 +1967,7 @@ static void process_deferred_bios(struct cache *cache)
|
|||
* this bio might require one, we pause until there are some
|
||||
* prepared mappings to process.
|
||||
*/
|
||||
prealloc_used = true;
|
||||
if (prealloc_data_structs(cache, &structs)) {
|
||||
spin_lock_irqsave(&cache->lock, flags);
|
||||
bio_list_merge(&cache->deferred_bios, &bios);
|
||||
|
|
@ -1981,7 +1983,6 @@ static void process_deferred_bios(struct cache *cache)
|
|||
process_discard_bio(cache, &structs, bio);
|
||||
else
|
||||
process_bio(cache, &structs, bio);
|
||||
prealloc_used = true;
|
||||
}
|
||||
|
||||
if (prealloc_used)
|
||||
|
|
@ -2010,6 +2011,7 @@ static void process_deferred_cells(struct cache *cache)
|
|||
* this bio might require one, we pause until there are some
|
||||
* prepared mappings to process.
|
||||
*/
|
||||
prealloc_used = true;
|
||||
if (prealloc_data_structs(cache, &structs)) {
|
||||
spin_lock_irqsave(&cache->lock, flags);
|
||||
list_splice(&cells, &cache->deferred_cells);
|
||||
|
|
@ -2018,7 +2020,6 @@ static void process_deferred_cells(struct cache *cache)
|
|||
}
|
||||
|
||||
process_cell(cache, &structs, cell);
|
||||
prealloc_used = true;
|
||||
}
|
||||
|
||||
if (prealloc_used)
|
||||
|
|
@ -2080,6 +2081,7 @@ static void writeback_some_dirty_blocks(struct cache *cache)
|
|||
if (policy_writeback_work(cache->policy, &oblock, &cblock, busy))
|
||||
break; /* no work to do */
|
||||
|
||||
prealloc_used = true;
|
||||
if (prealloc_data_structs(cache, &structs) ||
|
||||
get_cell(cache, oblock, &structs, &old_ocell)) {
|
||||
policy_set_dirty(cache->policy, oblock);
|
||||
|
|
@ -2087,7 +2089,6 @@ static void writeback_some_dirty_blocks(struct cache *cache)
|
|||
}
|
||||
|
||||
writeback(cache, &structs, oblock, cblock, old_ocell);
|
||||
prealloc_used = true;
|
||||
}
|
||||
|
||||
if (prealloc_used)
|
||||
|
|
|
|||
|
|
@ -666,16 +666,21 @@ static void requeue_io(struct thin_c *tc)
|
|||
requeue_deferred_cells(tc);
|
||||
}
|
||||
|
||||
static void error_retry_list(struct pool *pool)
|
||||
static void error_retry_list_with_code(struct pool *pool, int error)
|
||||
{
|
||||
struct thin_c *tc;
|
||||
|
||||
rcu_read_lock();
|
||||
list_for_each_entry_rcu(tc, &pool->active_thins, list)
|
||||
error_thin_bio_list(tc, &tc->retry_on_resume_list, -EIO);
|
||||
error_thin_bio_list(tc, &tc->retry_on_resume_list, error);
|
||||
rcu_read_unlock();
|
||||
}
|
||||
|
||||
static void error_retry_list(struct pool *pool)
|
||||
{
|
||||
return error_retry_list_with_code(pool, -EIO);
|
||||
}
|
||||
|
||||
/*
|
||||
* This section of code contains the logic for processing a thin device's IO.
|
||||
* Much of the code depends on pool object resources (lists, workqueues, etc)
|
||||
|
|
@ -2297,7 +2302,7 @@ static void do_no_space_timeout(struct work_struct *ws)
|
|||
if (get_pool_mode(pool) == PM_OUT_OF_DATA_SPACE && !pool->pf.error_if_no_space) {
|
||||
pool->pf.error_if_no_space = true;
|
||||
notify_of_pool_mode_change_to_oods(pool);
|
||||
error_retry_list(pool);
|
||||
error_retry_list_with_code(pool, -ENOSPC);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1729,7 +1729,8 @@ static int dm_merge_bvec(struct request_queue *q,
|
|||
struct mapped_device *md = q->queuedata;
|
||||
struct dm_table *map = dm_get_live_table_fast(md);
|
||||
struct dm_target *ti;
|
||||
sector_t max_sectors, max_size = 0;
|
||||
sector_t max_sectors;
|
||||
int max_size = 0;
|
||||
|
||||
if (unlikely(!map))
|
||||
goto out;
|
||||
|
|
@ -1742,18 +1743,10 @@ static int dm_merge_bvec(struct request_queue *q,
|
|||
* Find maximum amount of I/O that won't need splitting
|
||||
*/
|
||||
max_sectors = min(max_io_len(bvm->bi_sector, ti),
|
||||
(sector_t) queue_max_sectors(q));
|
||||
(sector_t) BIO_MAX_SECTORS);
|
||||
max_size = (max_sectors << SECTOR_SHIFT) - bvm->bi_size;
|
||||
|
||||
/*
|
||||
* FIXME: this stop-gap fix _must_ be cleaned up (by passing a sector_t
|
||||
* to the targets' merge function since it holds sectors not bytes).
|
||||
* Just doing this as an interim fix for stable@ because the more
|
||||
* comprehensive cleanup of switching to sector_t will impact every
|
||||
* DM target that implements a ->merge hook.
|
||||
*/
|
||||
if (max_size > INT_MAX)
|
||||
max_size = INT_MAX;
|
||||
if (max_size < 0)
|
||||
max_size = 0;
|
||||
|
||||
/*
|
||||
* merge_bvec_fn() returns number of bytes
|
||||
|
|
@ -1761,13 +1754,13 @@ static int dm_merge_bvec(struct request_queue *q,
|
|||
* max is precomputed maximal io size
|
||||
*/
|
||||
if (max_size && ti->type->merge)
|
||||
max_size = ti->type->merge(ti, bvm, biovec, (int) max_size);
|
||||
max_size = ti->type->merge(ti, bvm, biovec, max_size);
|
||||
/*
|
||||
* If the target doesn't support merge method and some of the devices
|
||||
* provided their merge_bvec method (we know this by looking for the
|
||||
* max_hw_sectors that dm_set_device_limits may set), then we can't
|
||||
* allow bios with multiple vector entries. So always set max_size
|
||||
* to 0, and the code below allows just one page.
|
||||
* provided their merge_bvec method (we know this by looking at
|
||||
* queue_max_hw_sectors), then we can't allow bios with multiple vector
|
||||
* entries. So always set max_size to 0, and the code below allows
|
||||
* just one page.
|
||||
*/
|
||||
else if (queue_max_hw_sectors(q) <= PAGE_SIZE >> 9)
|
||||
max_size = 0;
|
||||
|
|
|
|||
|
|
@ -5759,7 +5759,7 @@ static int get_bitmap_file(struct mddev *mddev, void __user * arg)
|
|||
char *ptr;
|
||||
int err;
|
||||
|
||||
file = kmalloc(sizeof(*file), GFP_NOIO);
|
||||
file = kzalloc(sizeof(*file), GFP_NOIO);
|
||||
if (!file)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
|||
|
|
@ -689,6 +689,7 @@ static int remove_one(struct dm_btree_info *info, dm_block_t root,
|
|||
value_ptr(n, index));
|
||||
|
||||
delete_at(n, index);
|
||||
keys[last_level] = k + 1ull;
|
||||
|
||||
} else
|
||||
r = -ENODATA;
|
||||
|
|
|
|||
|
|
@ -1476,6 +1476,7 @@ static void error(struct mddev *mddev, struct md_rdev *rdev)
|
|||
{
|
||||
char b[BDEVNAME_SIZE];
|
||||
struct r1conf *conf = mddev->private;
|
||||
unsigned long flags;
|
||||
|
||||
/*
|
||||
* If it is not operational, then we have already marked it as dead
|
||||
|
|
@ -1495,14 +1496,13 @@ static void error(struct mddev *mddev, struct md_rdev *rdev)
|
|||
return;
|
||||
}
|
||||
set_bit(Blocked, &rdev->flags);
|
||||
spin_lock_irqsave(&conf->device_lock, flags);
|
||||
if (test_and_clear_bit(In_sync, &rdev->flags)) {
|
||||
unsigned long flags;
|
||||
spin_lock_irqsave(&conf->device_lock, flags);
|
||||
mddev->degraded++;
|
||||
set_bit(Faulty, &rdev->flags);
|
||||
spin_unlock_irqrestore(&conf->device_lock, flags);
|
||||
} else
|
||||
set_bit(Faulty, &rdev->flags);
|
||||
spin_unlock_irqrestore(&conf->device_lock, flags);
|
||||
/*
|
||||
* if recovery is running, make sure it aborts.
|
||||
*/
|
||||
|
|
@ -1568,7 +1568,10 @@ static int raid1_spare_active(struct mddev *mddev)
|
|||
* Find all failed disks within the RAID1 configuration
|
||||
* and mark them readable.
|
||||
* Called under mddev lock, so rcu protection not needed.
|
||||
* device_lock used to avoid races with raid1_end_read_request
|
||||
* which expects 'In_sync' flags and ->degraded to be consistent.
|
||||
*/
|
||||
spin_lock_irqsave(&conf->device_lock, flags);
|
||||
for (i = 0; i < conf->raid_disks; i++) {
|
||||
struct md_rdev *rdev = conf->mirrors[i].rdev;
|
||||
struct md_rdev *repl = conf->mirrors[conf->raid_disks + i].rdev;
|
||||
|
|
@ -1599,7 +1602,6 @@ static int raid1_spare_active(struct mddev *mddev)
|
|||
sysfs_notify_dirent_safe(rdev->sysfs_state);
|
||||
}
|
||||
}
|
||||
spin_lock_irqsave(&conf->device_lock, flags);
|
||||
mddev->degraded -= count;
|
||||
spin_unlock_irqrestore(&conf->device_lock, flags);
|
||||
|
||||
|
|
|
|||
|
|
@ -2256,7 +2256,7 @@ static int resize_stripes(struct r5conf *conf, int newsize)
|
|||
static int drop_one_stripe(struct r5conf *conf)
|
||||
{
|
||||
struct stripe_head *sh;
|
||||
int hash = (conf->max_nr_stripes - 1) % NR_STRIPE_HASH_LOCKS;
|
||||
int hash = (conf->max_nr_stripes - 1) & STRIPE_HASH_LOCKS_MASK;
|
||||
|
||||
spin_lock_irq(conf->hash_locks + hash);
|
||||
sh = get_free_stripe(conf, hash);
|
||||
|
|
@ -6388,7 +6388,8 @@ static unsigned long raid5_cache_scan(struct shrinker *shrink,
|
|||
|
||||
if (mutex_trylock(&conf->cache_size_mutex)) {
|
||||
ret= 0;
|
||||
while (ret < sc->nr_to_scan) {
|
||||
while (ret < sc->nr_to_scan &&
|
||||
conf->max_nr_stripes > conf->min_nr_stripes) {
|
||||
if (drop_one_stripe(conf) == 0) {
|
||||
ret = SHRINK_STOP;
|
||||
break;
|
||||
|
|
|
|||
Loading…
Reference in a new issue