mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
Merge commit '3ff195b011' into for-linus
Conflicts: drivers/md/md.c - Resolved conflict in md_update_sb - Added extra 'NULL' arg to new instance of sysfs_get_dirent. Signed-off-by: NeilBrown <[email protected]>
This commit is contained in:
commit
19fdb9eefb
9962 changed files with 487914 additions and 200382 deletions
|
|
@ -1685,9 +1685,9 @@ int bitmap_create(mddev_t *mddev)
|
|||
|
||||
bitmap->mddev = mddev;
|
||||
|
||||
bm = sysfs_get_dirent(mddev->kobj.sd, "bitmap");
|
||||
bm = sysfs_get_dirent(mddev->kobj.sd, NULL, "bitmap");
|
||||
if (bm) {
|
||||
bitmap->sysfs_can_clear = sysfs_get_dirent(bm, "can_clear");
|
||||
bitmap->sysfs_can_clear = sysfs_get_dirent(bm, NULL, "can_clear");
|
||||
sysfs_put(bm);
|
||||
} else
|
||||
bitmap->sysfs_can_clear = NULL;
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
*/
|
||||
|
||||
#include <linux/bio.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/dm-dirty-log.h>
|
||||
#include <linux/device-mapper.h>
|
||||
#include <linux/dm-log-userspace.h>
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/slab.h>
|
||||
#include <net/sock.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/connector.h>
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
#include <linux/ctype.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/vmalloc.h>
|
||||
|
||||
#include "dm.h"
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@
|
|||
#include "dm.h"
|
||||
#include "dm-path-selector.h"
|
||||
|
||||
#include <linux/slab.h>
|
||||
|
||||
#define DM_MSG_PREFIX "multipath service-time"
|
||||
#define ST_MIN_IO 1
|
||||
#define ST_MAX_RELATIVE_THROUGHPUT 100
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ static struct attribute *dm_attrs[] = {
|
|||
NULL,
|
||||
};
|
||||
|
||||
static struct sysfs_ops dm_sysfs_ops = {
|
||||
static const struct sysfs_ops dm_sysfs_ops = {
|
||||
.show = dm_attr_show,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/kmod.h>
|
||||
#include <linux/bio.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#define DM_MSG_PREFIX "target"
|
||||
|
||||
|
|
|
|||
|
|
@ -64,6 +64,7 @@
|
|||
#define MaxFault 50
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/raid/md_u.h>
|
||||
#include <linux/slab.h>
|
||||
#include "md.h"
|
||||
#include <linux/seq_file.h>
|
||||
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
#include <linux/blkdev.h>
|
||||
#include <linux/raid/md_u.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/slab.h>
|
||||
#include "md.h"
|
||||
#include "linear.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@
|
|||
#include <linux/delay.h>
|
||||
#include <linux/raid/md_p.h>
|
||||
#include <linux/raid/md_u.h>
|
||||
#include <linux/slab.h>
|
||||
#include "md.h"
|
||||
#include "bitmap.h"
|
||||
|
||||
|
|
@ -1814,7 +1815,7 @@ static int bind_rdev_to_array(mdk_rdev_t * rdev, mddev_t * mddev)
|
|||
kobject_del(&rdev->kobj);
|
||||
goto fail;
|
||||
}
|
||||
rdev->sysfs_state = sysfs_get_dirent(rdev->kobj.sd, "state");
|
||||
rdev->sysfs_state = sysfs_get_dirent(rdev->kobj.sd, NULL, "state");
|
||||
|
||||
list_add_rcu(&rdev->same_set, &mddev->disks);
|
||||
bd_claim_by_disk(rdev->bdev, rdev->bdev->bd_holder, mddev->gendisk);
|
||||
|
|
@ -2683,7 +2684,7 @@ static void rdev_free(struct kobject *ko)
|
|||
mdk_rdev_t *rdev = container_of(ko, mdk_rdev_t, kobj);
|
||||
kfree(rdev);
|
||||
}
|
||||
static struct sysfs_ops rdev_sysfs_ops = {
|
||||
static const struct sysfs_ops rdev_sysfs_ops = {
|
||||
.show = rdev_attr_show,
|
||||
.store = rdev_attr_store,
|
||||
};
|
||||
|
|
@ -3027,7 +3028,7 @@ level_store(mddev_t *mddev, const char *buf, size_t len)
|
|||
printk(KERN_WARNING
|
||||
"md: cannot register extra attributes for %s\n",
|
||||
mdname(mddev));
|
||||
mddev->sysfs_action = sysfs_get_dirent(mddev->kobj.sd, "sync_action");
|
||||
mddev->sysfs_action = sysfs_get_dirent(mddev->kobj.sd, NULL, "sync_action");
|
||||
}
|
||||
if (mddev->pers->sync_request != NULL &&
|
||||
pers->sync_request == NULL) {
|
||||
|
|
@ -4146,7 +4147,7 @@ static void md_free(struct kobject *ko)
|
|||
kfree(mddev);
|
||||
}
|
||||
|
||||
static struct sysfs_ops md_sysfs_ops = {
|
||||
static const struct sysfs_ops md_sysfs_ops = {
|
||||
.show = md_attr_show,
|
||||
.store = md_attr_store,
|
||||
};
|
||||
|
|
@ -4260,7 +4261,7 @@ static int md_alloc(dev_t dev, char *name)
|
|||
mutex_unlock(&disks_mutex);
|
||||
if (!error) {
|
||||
kobject_uevent(&mddev->kobj, KOBJ_ADD);
|
||||
mddev->sysfs_state = sysfs_get_dirent(mddev->kobj.sd, "array_state");
|
||||
mddev->sysfs_state = sysfs_get_dirent(mddev->kobj.sd, NULL, "array_state");
|
||||
}
|
||||
mddev_put(mddev);
|
||||
return error;
|
||||
|
|
@ -4473,7 +4474,7 @@ static int md_run(mddev_t *mddev)
|
|||
printk(KERN_WARNING
|
||||
"md: cannot register extra attributes for %s\n",
|
||||
mdname(mddev));
|
||||
mddev->sysfs_action = sysfs_get_dirent(mddev->kobj.sd, "sync_action");
|
||||
mddev->sysfs_action = sysfs_get_dirent(mddev->kobj.sd, NULL, "sync_action");
|
||||
} else if (mddev->ro == 2) /* auto-readonly not meaningful */
|
||||
mddev->ro = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
#include <linux/blkdev.h>
|
||||
#include <linux/raid/md_u.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/slab.h>
|
||||
#include "md.h"
|
||||
#include "multipath.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@
|
|||
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/slab.h>
|
||||
#include "md.h"
|
||||
#include "raid0.h"
|
||||
#include "raid5.h"
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <linux/slab.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/seq_file.h>
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <linux/slab.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/seq_file.h>
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@
|
|||
#include <linux/async.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/slab.h>
|
||||
#include "md.h"
|
||||
#include "raid5.h"
|
||||
#include "raid0.h"
|
||||
|
|
@ -1654,8 +1655,8 @@ static sector_t raid5_compute_sector(raid5_conf_t *conf, sector_t r_sector,
|
|||
int previous, int *dd_idx,
|
||||
struct stripe_head *sh)
|
||||
{
|
||||
long stripe;
|
||||
unsigned long chunk_number;
|
||||
sector_t stripe, stripe2;
|
||||
sector_t chunk_number;
|
||||
unsigned int chunk_offset;
|
||||
int pd_idx, qd_idx;
|
||||
int ddf_layout = 0;
|
||||
|
|
@ -1675,18 +1676,13 @@ static sector_t raid5_compute_sector(raid5_conf_t *conf, sector_t r_sector,
|
|||
*/
|
||||
chunk_offset = sector_div(r_sector, sectors_per_chunk);
|
||||
chunk_number = r_sector;
|
||||
BUG_ON(r_sector != chunk_number);
|
||||
|
||||
/*
|
||||
* Compute the stripe number
|
||||
*/
|
||||
stripe = chunk_number / data_disks;
|
||||
|
||||
/*
|
||||
* Compute the data disk and parity disk indexes inside the stripe
|
||||
*/
|
||||
*dd_idx = chunk_number % data_disks;
|
||||
|
||||
stripe = chunk_number;
|
||||
*dd_idx = sector_div(stripe, data_disks);
|
||||
stripe2 = stripe;
|
||||
/*
|
||||
* Select the parity disk based on the user selected algorithm.
|
||||
*/
|
||||
|
|
@ -1698,21 +1694,21 @@ static sector_t raid5_compute_sector(raid5_conf_t *conf, sector_t r_sector,
|
|||
case 5:
|
||||
switch (algorithm) {
|
||||
case ALGORITHM_LEFT_ASYMMETRIC:
|
||||
pd_idx = data_disks - stripe % raid_disks;
|
||||
pd_idx = data_disks - sector_div(stripe2, raid_disks);
|
||||
if (*dd_idx >= pd_idx)
|
||||
(*dd_idx)++;
|
||||
break;
|
||||
case ALGORITHM_RIGHT_ASYMMETRIC:
|
||||
pd_idx = stripe % raid_disks;
|
||||
pd_idx = sector_div(stripe2, raid_disks);
|
||||
if (*dd_idx >= pd_idx)
|
||||
(*dd_idx)++;
|
||||
break;
|
||||
case ALGORITHM_LEFT_SYMMETRIC:
|
||||
pd_idx = data_disks - stripe % raid_disks;
|
||||
pd_idx = data_disks - sector_div(stripe2, raid_disks);
|
||||
*dd_idx = (pd_idx + 1 + *dd_idx) % raid_disks;
|
||||
break;
|
||||
case ALGORITHM_RIGHT_SYMMETRIC:
|
||||
pd_idx = stripe % raid_disks;
|
||||
pd_idx = sector_div(stripe2, raid_disks);
|
||||
*dd_idx = (pd_idx + 1 + *dd_idx) % raid_disks;
|
||||
break;
|
||||
case ALGORITHM_PARITY_0:
|
||||
|
|
@ -1730,7 +1726,7 @@ static sector_t raid5_compute_sector(raid5_conf_t *conf, sector_t r_sector,
|
|||
|
||||
switch (algorithm) {
|
||||
case ALGORITHM_LEFT_ASYMMETRIC:
|
||||
pd_idx = raid_disks - 1 - (stripe % raid_disks);
|
||||
pd_idx = raid_disks - 1 - sector_div(stripe2, raid_disks);
|
||||
qd_idx = pd_idx + 1;
|
||||
if (pd_idx == raid_disks-1) {
|
||||
(*dd_idx)++; /* Q D D D P */
|
||||
|
|
@ -1739,7 +1735,7 @@ static sector_t raid5_compute_sector(raid5_conf_t *conf, sector_t r_sector,
|
|||
(*dd_idx) += 2; /* D D P Q D */
|
||||
break;
|
||||
case ALGORITHM_RIGHT_ASYMMETRIC:
|
||||
pd_idx = stripe % raid_disks;
|
||||
pd_idx = sector_div(stripe2, raid_disks);
|
||||
qd_idx = pd_idx + 1;
|
||||
if (pd_idx == raid_disks-1) {
|
||||
(*dd_idx)++; /* Q D D D P */
|
||||
|
|
@ -1748,12 +1744,12 @@ static sector_t raid5_compute_sector(raid5_conf_t *conf, sector_t r_sector,
|
|||
(*dd_idx) += 2; /* D D P Q D */
|
||||
break;
|
||||
case ALGORITHM_LEFT_SYMMETRIC:
|
||||
pd_idx = raid_disks - 1 - (stripe % raid_disks);
|
||||
pd_idx = raid_disks - 1 - sector_div(stripe2, raid_disks);
|
||||
qd_idx = (pd_idx + 1) % raid_disks;
|
||||
*dd_idx = (pd_idx + 2 + *dd_idx) % raid_disks;
|
||||
break;
|
||||
case ALGORITHM_RIGHT_SYMMETRIC:
|
||||
pd_idx = stripe % raid_disks;
|
||||
pd_idx = sector_div(stripe2, raid_disks);
|
||||
qd_idx = (pd_idx + 1) % raid_disks;
|
||||
*dd_idx = (pd_idx + 2 + *dd_idx) % raid_disks;
|
||||
break;
|
||||
|
|
@ -1772,7 +1768,7 @@ static sector_t raid5_compute_sector(raid5_conf_t *conf, sector_t r_sector,
|
|||
/* Exactly the same as RIGHT_ASYMMETRIC, but or
|
||||
* of blocks for computing Q is different.
|
||||
*/
|
||||
pd_idx = stripe % raid_disks;
|
||||
pd_idx = sector_div(stripe2, raid_disks);
|
||||
qd_idx = pd_idx + 1;
|
||||
if (pd_idx == raid_disks-1) {
|
||||
(*dd_idx)++; /* Q D D D P */
|
||||
|
|
@ -1787,7 +1783,8 @@ static sector_t raid5_compute_sector(raid5_conf_t *conf, sector_t r_sector,
|
|||
* D D D P Q rather than
|
||||
* Q D D D P
|
||||
*/
|
||||
pd_idx = raid_disks - 1 - ((stripe + 1) % raid_disks);
|
||||
stripe2 += 1;
|
||||
pd_idx = raid_disks - 1 - sector_div(stripe2, raid_disks);
|
||||
qd_idx = pd_idx + 1;
|
||||
if (pd_idx == raid_disks-1) {
|
||||
(*dd_idx)++; /* Q D D D P */
|
||||
|
|
@ -1799,7 +1796,7 @@ static sector_t raid5_compute_sector(raid5_conf_t *conf, sector_t r_sector,
|
|||
|
||||
case ALGORITHM_ROTATING_N_CONTINUE:
|
||||
/* Same as left_symmetric but Q is before P */
|
||||
pd_idx = raid_disks - 1 - (stripe % raid_disks);
|
||||
pd_idx = raid_disks - 1 - sector_div(stripe2, raid_disks);
|
||||
qd_idx = (pd_idx + raid_disks - 1) % raid_disks;
|
||||
*dd_idx = (pd_idx + 1 + *dd_idx) % raid_disks;
|
||||
ddf_layout = 1;
|
||||
|
|
@ -1807,27 +1804,27 @@ static sector_t raid5_compute_sector(raid5_conf_t *conf, sector_t r_sector,
|
|||
|
||||
case ALGORITHM_LEFT_ASYMMETRIC_6:
|
||||
/* RAID5 left_asymmetric, with Q on last device */
|
||||
pd_idx = data_disks - stripe % (raid_disks-1);
|
||||
pd_idx = data_disks - sector_div(stripe2, raid_disks-1);
|
||||
if (*dd_idx >= pd_idx)
|
||||
(*dd_idx)++;
|
||||
qd_idx = raid_disks - 1;
|
||||
break;
|
||||
|
||||
case ALGORITHM_RIGHT_ASYMMETRIC_6:
|
||||
pd_idx = stripe % (raid_disks-1);
|
||||
pd_idx = sector_div(stripe2, raid_disks-1);
|
||||
if (*dd_idx >= pd_idx)
|
||||
(*dd_idx)++;
|
||||
qd_idx = raid_disks - 1;
|
||||
break;
|
||||
|
||||
case ALGORITHM_LEFT_SYMMETRIC_6:
|
||||
pd_idx = data_disks - stripe % (raid_disks-1);
|
||||
pd_idx = data_disks - sector_div(stripe2, raid_disks-1);
|
||||
*dd_idx = (pd_idx + 1 + *dd_idx) % (raid_disks-1);
|
||||
qd_idx = raid_disks - 1;
|
||||
break;
|
||||
|
||||
case ALGORITHM_RIGHT_SYMMETRIC_6:
|
||||
pd_idx = stripe % (raid_disks-1);
|
||||
pd_idx = sector_div(stripe2, raid_disks-1);
|
||||
*dd_idx = (pd_idx + 1 + *dd_idx) % (raid_disks-1);
|
||||
qd_idx = raid_disks - 1;
|
||||
break;
|
||||
|
|
@ -1869,14 +1866,14 @@ static sector_t compute_blocknr(struct stripe_head *sh, int i, int previous)
|
|||
: conf->algorithm;
|
||||
sector_t stripe;
|
||||
int chunk_offset;
|
||||
int chunk_number, dummy1, dd_idx = i;
|
||||
sector_t chunk_number;
|
||||
int dummy1, dd_idx = i;
|
||||
sector_t r_sector;
|
||||
struct stripe_head sh2;
|
||||
|
||||
|
||||
chunk_offset = sector_div(new_sector, sectors_per_chunk);
|
||||
stripe = new_sector;
|
||||
BUG_ON(new_sector != stripe);
|
||||
|
||||
if (i == sh->pd_idx)
|
||||
return 0;
|
||||
|
|
@ -1965,7 +1962,7 @@ static sector_t compute_blocknr(struct stripe_head *sh, int i, int previous)
|
|||
}
|
||||
|
||||
chunk_number = stripe * data_disks + i;
|
||||
r_sector = (sector_t)chunk_number * sectors_per_chunk + chunk_offset;
|
||||
r_sector = chunk_number * sectors_per_chunk + chunk_offset;
|
||||
|
||||
check = raid5_compute_sector(conf, r_sector,
|
||||
previous, &dummy1, &sh2);
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
*/
|
||||
|
||||
#include <linux/raid/pq.h>
|
||||
#include <linux/gfp.h>
|
||||
#ifndef __KERNEL__
|
||||
#include <sys/mman.h>
|
||||
#include <stdio.h>
|
||||
|
|
|
|||
Loading…
Reference in a new issue