diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-01-21 10:32:11 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-01-21 10:32:11 -0500 |
| commit | 456eac94789e1b512515e6974e091ef655f343de (patch) | |
| tree | 79f277d02e5e480a373c129bdce7564421d360c7 /drivers | |
| parent | dedd0c2a48d1eb779373de5eddd04a3e059ce540 (diff) | |
| parent | f06f135d8642e2f6812cfcb4ea8e4e9122d4d58c (diff) | |
Merge branch 'for-linus' of git://git.kernel.dk/linux-2.6-block
* 'for-linus' of git://git.kernel.dk/linux-2.6-block:
fs/bio.c: fix shadows sparse warning
drbd: The kernel code is now equivalent to out of tree release 8.3.7
drbd: Allow online resizing of DRBD devices while peer not reachable (needs to be explicitly forced)
drbd: Don't go into StandAlone mode when authentification failes because of network error
drivers/block/drbd/drbd_receiver.c: correct NULL test
cfq-iosched: Respect ioprio_class when preempting
genhd: overlapping variable definition
block: removed unused as_io_context
DM: Fix device mapper topology stacking
block: bdev_stack_limits wrapper
block: Fix discard alignment calculation and printing
block: Correct handling of bottom device misaligment
drbd: check on CONFIG_LBDAF, not LBD
drivers/block/drbd: Correct NULL test
drbd: Silenced an assert that could triggered after changing write ordering method
drbd: Kconfig fix
drbd: Fix for a race between IO and a detach operation [Bugz 262]
drbd: Use drbd_crypto_is_hash() instead of an open coded check
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/block/drbd/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/block/drbd/drbd_int.h | 7 | ||||
| -rw-r--r-- | drivers/block/drbd/drbd_main.c | 1 | ||||
| -rw-r--r-- | drivers/block/drbd/drbd_nl.c | 19 | ||||
| -rw-r--r-- | drivers/block/drbd/drbd_receiver.c | 46 | ||||
| -rw-r--r-- | drivers/md/dm-table.c | 20 |
6 files changed, 52 insertions, 43 deletions
diff --git a/drivers/block/drbd/Kconfig b/drivers/block/drbd/Kconfig index f4acd04ebeef..df0983787390 100644 --- a/drivers/block/drbd/Kconfig +++ b/drivers/block/drbd/Kconfig | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | comment "DRBD disabled because PROC_FS, INET or CONNECTOR not selected" | 5 | comment "DRBD disabled because PROC_FS, INET or CONNECTOR not selected" |
| 6 | depends on !PROC_FS || !INET || !CONNECTOR | 6 | depends on PROC_FS='n' || INET='n' || CONNECTOR='n' |
| 7 | 7 | ||
| 8 | config BLK_DEV_DRBD | 8 | config BLK_DEV_DRBD |
| 9 | tristate "DRBD Distributed Replicated Block Device support" | 9 | tristate "DRBD Distributed Replicated Block Device support" |
diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h index c97558763430..2bf3a6ef3684 100644 --- a/drivers/block/drbd/drbd_int.h +++ b/drivers/block/drbd/drbd_int.h | |||
| @@ -1275,7 +1275,7 @@ struct bm_extent { | |||
| 1275 | #if DRBD_MAX_SECTORS_BM < DRBD_MAX_SECTORS_32 | 1275 | #if DRBD_MAX_SECTORS_BM < DRBD_MAX_SECTORS_32 |
| 1276 | #define DRBD_MAX_SECTORS DRBD_MAX_SECTORS_BM | 1276 | #define DRBD_MAX_SECTORS DRBD_MAX_SECTORS_BM |
| 1277 | #define DRBD_MAX_SECTORS_FLEX DRBD_MAX_SECTORS_BM | 1277 | #define DRBD_MAX_SECTORS_FLEX DRBD_MAX_SECTORS_BM |
| 1278 | #elif !defined(CONFIG_LBD) && BITS_PER_LONG == 32 | 1278 | #elif !defined(CONFIG_LBDAF) && BITS_PER_LONG == 32 |
| 1279 | #define DRBD_MAX_SECTORS DRBD_MAX_SECTORS_32 | 1279 | #define DRBD_MAX_SECTORS DRBD_MAX_SECTORS_32 |
| 1280 | #define DRBD_MAX_SECTORS_FLEX DRBD_MAX_SECTORS_32 | 1280 | #define DRBD_MAX_SECTORS_FLEX DRBD_MAX_SECTORS_32 |
| 1281 | #else | 1281 | #else |
| @@ -1371,10 +1371,9 @@ extern int is_valid_ar_handle(struct drbd_request *, sector_t); | |||
| 1371 | extern void drbd_suspend_io(struct drbd_conf *mdev); | 1371 | extern void drbd_suspend_io(struct drbd_conf *mdev); |
| 1372 | extern void drbd_resume_io(struct drbd_conf *mdev); | 1372 | extern void drbd_resume_io(struct drbd_conf *mdev); |
| 1373 | extern char *ppsize(char *buf, unsigned long long size); | 1373 | extern char *ppsize(char *buf, unsigned long long size); |
| 1374 | extern sector_t drbd_new_dev_size(struct drbd_conf *, | 1374 | extern sector_t drbd_new_dev_size(struct drbd_conf *, struct drbd_backing_dev *, int); |
| 1375 | struct drbd_backing_dev *); | ||
| 1376 | enum determine_dev_size { dev_size_error = -1, unchanged = 0, shrunk = 1, grew = 2 }; | 1375 | enum determine_dev_size { dev_size_error = -1, unchanged = 0, shrunk = 1, grew = 2 }; |
| 1377 | extern enum determine_dev_size drbd_determin_dev_size(struct drbd_conf *) __must_hold(local); | 1376 | extern enum determine_dev_size drbd_determin_dev_size(struct drbd_conf *, int force) __must_hold(local); |
| 1378 | extern void resync_after_online_grow(struct drbd_conf *); | 1377 | extern void resync_after_online_grow(struct drbd_conf *); |
| 1379 | extern void drbd_setup_queue_param(struct drbd_conf *mdev, unsigned int) __must_hold(local); | 1378 | extern void drbd_setup_queue_param(struct drbd_conf *mdev, unsigned int) __must_hold(local); |
| 1380 | extern int drbd_set_role(struct drbd_conf *mdev, enum drbd_role new_role, | 1379 | extern int drbd_set_role(struct drbd_conf *mdev, enum drbd_role new_role, |
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c index 9348f33f6242..e898ad9eb1c3 100644 --- a/drivers/block/drbd/drbd_main.c +++ b/drivers/block/drbd/drbd_main.c | |||
| @@ -1298,6 +1298,7 @@ static void after_state_ch(struct drbd_conf *mdev, union drbd_state os, | |||
| 1298 | dev_err(DEV, "Sending state in drbd_io_error() failed\n"); | 1298 | dev_err(DEV, "Sending state in drbd_io_error() failed\n"); |
| 1299 | } | 1299 | } |
| 1300 | 1300 | ||
| 1301 | wait_event(mdev->misc_wait, !atomic_read(&mdev->local_cnt)); | ||
| 1301 | lc_destroy(mdev->resync); | 1302 | lc_destroy(mdev->resync); |
| 1302 | mdev->resync = NULL; | 1303 | mdev->resync = NULL; |
| 1303 | lc_destroy(mdev->act_log); | 1304 | lc_destroy(mdev->act_log); |
diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c index 4e0726aa53b0..1292e0620663 100644 --- a/drivers/block/drbd/drbd_nl.c +++ b/drivers/block/drbd/drbd_nl.c | |||
| @@ -510,7 +510,7 @@ void drbd_resume_io(struct drbd_conf *mdev) | |||
| 510 | * Returns 0 on success, negative return values indicate errors. | 510 | * Returns 0 on success, negative return values indicate errors. |
| 511 | * You should call drbd_md_sync() after calling this function. | 511 | * You should call drbd_md_sync() after calling this function. |
| 512 | */ | 512 | */ |
| 513 | enum determine_dev_size drbd_determin_dev_size(struct drbd_conf *mdev) __must_hold(local) | 513 | enum determine_dev_size drbd_determin_dev_size(struct drbd_conf *mdev, int force) __must_hold(local) |
| 514 | { | 514 | { |
| 515 | sector_t prev_first_sect, prev_size; /* previous meta location */ | 515 | sector_t prev_first_sect, prev_size; /* previous meta location */ |
| 516 | sector_t la_size; | 516 | sector_t la_size; |
| @@ -541,7 +541,7 @@ enum determine_dev_size drbd_determin_dev_size(struct drbd_conf *mdev) __must_ho | |||
| 541 | /* TODO: should only be some assert here, not (re)init... */ | 541 | /* TODO: should only be some assert here, not (re)init... */ |
| 542 | drbd_md_set_sector_offsets(mdev, mdev->ldev); | 542 | drbd_md_set_sector_offsets(mdev, mdev->ldev); |
| 543 | 543 | ||
| 544 | size = drbd_new_dev_size(mdev, mdev->ldev); | 544 | size = drbd_new_dev_size(mdev, mdev->ldev, force); |
| 545 | 545 | ||
| 546 | if (drbd_get_capacity(mdev->this_bdev) != size || | 546 | if (drbd_get_capacity(mdev->this_bdev) != size || |
| 547 | drbd_bm_capacity(mdev) != size) { | 547 | drbd_bm_capacity(mdev) != size) { |
| @@ -596,7 +596,7 @@ out: | |||
| 596 | } | 596 | } |
| 597 | 597 | ||
| 598 | sector_t | 598 | sector_t |
| 599 | drbd_new_dev_size(struct drbd_conf *mdev, struct drbd_backing_dev *bdev) | 599 | drbd_new_dev_size(struct drbd_conf *mdev, struct drbd_backing_dev *bdev, int assume_peer_has_space) |
| 600 | { | 600 | { |
| 601 | sector_t p_size = mdev->p_size; /* partner's disk size. */ | 601 | sector_t p_size = mdev->p_size; /* partner's disk size. */ |
| 602 | sector_t la_size = bdev->md.la_size_sect; /* last agreed size. */ | 602 | sector_t la_size = bdev->md.la_size_sect; /* last agreed size. */ |
| @@ -606,6 +606,11 @@ drbd_new_dev_size(struct drbd_conf *mdev, struct drbd_backing_dev *bdev) | |||
| 606 | 606 | ||
| 607 | m_size = drbd_get_max_capacity(bdev); | 607 | m_size = drbd_get_max_capacity(bdev); |
| 608 | 608 | ||
| 609 | if (mdev->state.conn < C_CONNECTED && assume_peer_has_space) { | ||
| 610 | dev_warn(DEV, "Resize while not connected was forced by the user!\n"); | ||
| 611 | p_size = m_size; | ||
| 612 | } | ||
| 613 | |||
| 609 | if (p_size && m_size) { | 614 | if (p_size && m_size) { |
| 610 | size = min_t(sector_t, p_size, m_size); | 615 | size = min_t(sector_t, p_size, m_size); |
| 611 | } else { | 616 | } else { |
| @@ -965,7 +970,7 @@ static int drbd_nl_disk_conf(struct drbd_conf *mdev, struct drbd_nl_cfg_req *nlp | |||
| 965 | 970 | ||
| 966 | /* Prevent shrinking of consistent devices ! */ | 971 | /* Prevent shrinking of consistent devices ! */ |
| 967 | if (drbd_md_test_flag(nbc, MDF_CONSISTENT) && | 972 | if (drbd_md_test_flag(nbc, MDF_CONSISTENT) && |
| 968 | drbd_new_dev_size(mdev, nbc) < nbc->md.la_size_sect) { | 973 | drbd_new_dev_size(mdev, nbc, 0) < nbc->md.la_size_sect) { |
| 969 | dev_warn(DEV, "refusing to truncate a consistent device\n"); | 974 | dev_warn(DEV, "refusing to truncate a consistent device\n"); |
| 970 | retcode = ERR_DISK_TO_SMALL; | 975 | retcode = ERR_DISK_TO_SMALL; |
| 971 | goto force_diskless_dec; | 976 | goto force_diskless_dec; |
| @@ -1052,7 +1057,7 @@ static int drbd_nl_disk_conf(struct drbd_conf *mdev, struct drbd_nl_cfg_req *nlp | |||
| 1052 | !drbd_md_test_flag(mdev->ldev, MDF_CONNECTED_IND)) | 1057 | !drbd_md_test_flag(mdev->ldev, MDF_CONNECTED_IND)) |
| 1053 | set_bit(USE_DEGR_WFC_T, &mdev->flags); | 1058 | set_bit(USE_DEGR_WFC_T, &mdev->flags); |
| 1054 | 1059 | ||
| 1055 | dd = drbd_determin_dev_size(mdev); | 1060 | dd = drbd_determin_dev_size(mdev, 0); |
| 1056 | if (dd == dev_size_error) { | 1061 | if (dd == dev_size_error) { |
| 1057 | retcode = ERR_NOMEM_BITMAP; | 1062 | retcode = ERR_NOMEM_BITMAP; |
| 1058 | goto force_diskless_dec; | 1063 | goto force_diskless_dec; |
| @@ -1271,7 +1276,7 @@ static int drbd_nl_net_conf(struct drbd_conf *mdev, struct drbd_nl_cfg_req *nlp, | |||
| 1271 | goto fail; | 1276 | goto fail; |
| 1272 | } | 1277 | } |
| 1273 | 1278 | ||
| 1274 | if (crypto_tfm_alg_type(crypto_hash_tfm(tfm)) != CRYPTO_ALG_TYPE_SHASH) { | 1279 | if (!drbd_crypto_is_hash(crypto_hash_tfm(tfm))) { |
| 1275 | retcode = ERR_AUTH_ALG_ND; | 1280 | retcode = ERR_AUTH_ALG_ND; |
| 1276 | goto fail; | 1281 | goto fail; |
| 1277 | } | 1282 | } |
| @@ -1504,7 +1509,7 @@ static int drbd_nl_resize(struct drbd_conf *mdev, struct drbd_nl_cfg_req *nlp, | |||
| 1504 | } | 1509 | } |
| 1505 | 1510 | ||
| 1506 | mdev->ldev->dc.disk_size = (sector_t)rs.resize_size; | 1511 | mdev->ldev->dc.disk_size = (sector_t)rs.resize_size; |
| 1507 | dd = drbd_determin_dev_size(mdev); | 1512 | dd = drbd_determin_dev_size(mdev, rs.resize_force); |
| 1508 | drbd_md_sync(mdev); | 1513 | drbd_md_sync(mdev); |
| 1509 | put_ldev(mdev); | 1514 | put_ldev(mdev); |
| 1510 | if (dd == dev_size_error) { | 1515 | if (dd == dev_size_error) { |
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c index 259c1351b152..f22a5283128a 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c | |||
| @@ -878,9 +878,13 @@ retry: | |||
| 878 | 878 | ||
| 879 | if (mdev->cram_hmac_tfm) { | 879 | if (mdev->cram_hmac_tfm) { |
| 880 | /* drbd_request_state(mdev, NS(conn, WFAuth)); */ | 880 | /* drbd_request_state(mdev, NS(conn, WFAuth)); */ |
| 881 | if (!drbd_do_auth(mdev)) { | 881 | switch (drbd_do_auth(mdev)) { |
| 882 | case -1: | ||
| 882 | dev_err(DEV, "Authentication of peer failed\n"); | 883 | dev_err(DEV, "Authentication of peer failed\n"); |
| 883 | return -1; | 884 | return -1; |
| 885 | case 0: | ||
| 886 | dev_err(DEV, "Authentication of peer failed, trying again.\n"); | ||
| 887 | return 0; | ||
| 884 | } | 888 | } |
| 885 | } | 889 | } |
| 886 | 890 | ||
| @@ -1201,10 +1205,11 @@ static int receive_Barrier(struct drbd_conf *mdev, struct p_header *h) | |||
| 1201 | 1205 | ||
| 1202 | case WO_bdev_flush: | 1206 | case WO_bdev_flush: |
| 1203 | case WO_drain_io: | 1207 | case WO_drain_io: |
| 1204 | D_ASSERT(rv == FE_STILL_LIVE); | 1208 | if (rv == FE_STILL_LIVE) { |
| 1205 | set_bit(DE_BARRIER_IN_NEXT_EPOCH_ISSUED, &mdev->current_epoch->flags); | 1209 | set_bit(DE_BARRIER_IN_NEXT_EPOCH_ISSUED, &mdev->current_epoch->flags); |
| 1206 | drbd_wait_ee_list_empty(mdev, &mdev->active_ee); | 1210 | drbd_wait_ee_list_empty(mdev, &mdev->active_ee); |
| 1207 | rv = drbd_flush_after_epoch(mdev, mdev->current_epoch); | 1211 | rv = drbd_flush_after_epoch(mdev, mdev->current_epoch); |
| 1212 | } | ||
| 1208 | if (rv == FE_RECYCLED) | 1213 | if (rv == FE_RECYCLED) |
| 1209 | return TRUE; | 1214 | return TRUE; |
| 1210 | 1215 | ||
| @@ -2865,7 +2870,7 @@ static int receive_sizes(struct drbd_conf *mdev, struct p_header *h) | |||
| 2865 | 2870 | ||
| 2866 | /* Never shrink a device with usable data during connect. | 2871 | /* Never shrink a device with usable data during connect. |
| 2867 | But allow online shrinking if we are connected. */ | 2872 | But allow online shrinking if we are connected. */ |
| 2868 | if (drbd_new_dev_size(mdev, mdev->ldev) < | 2873 | if (drbd_new_dev_size(mdev, mdev->ldev, 0) < |
| 2869 | drbd_get_capacity(mdev->this_bdev) && | 2874 | drbd_get_capacity(mdev->this_bdev) && |
| 2870 | mdev->state.disk >= D_OUTDATED && | 2875 | mdev->state.disk >= D_OUTDATED && |
| 2871 | mdev->state.conn < C_CONNECTED) { | 2876 | mdev->state.conn < C_CONNECTED) { |
| @@ -2880,7 +2885,7 @@ static int receive_sizes(struct drbd_conf *mdev, struct p_header *h) | |||
| 2880 | #undef min_not_zero | 2885 | #undef min_not_zero |
| 2881 | 2886 | ||
| 2882 | if (get_ldev(mdev)) { | 2887 | if (get_ldev(mdev)) { |
| 2883 | dd = drbd_determin_dev_size(mdev); | 2888 | dd = drbd_determin_dev_size(mdev, 0); |
| 2884 | put_ldev(mdev); | 2889 | put_ldev(mdev); |
| 2885 | if (dd == dev_size_error) | 2890 | if (dd == dev_size_error) |
| 2886 | return FALSE; | 2891 | return FALSE; |
| @@ -3830,10 +3835,17 @@ static int drbd_do_auth(struct drbd_conf *mdev) | |||
| 3830 | { | 3835 | { |
| 3831 | dev_err(DEV, "This kernel was build without CONFIG_CRYPTO_HMAC.\n"); | 3836 | dev_err(DEV, "This kernel was build without CONFIG_CRYPTO_HMAC.\n"); |
| 3832 | dev_err(DEV, "You need to disable 'cram-hmac-alg' in drbd.conf.\n"); | 3837 | dev_err(DEV, "You need to disable 'cram-hmac-alg' in drbd.conf.\n"); |
| 3833 | return 0; | 3838 | return -1; |
| 3834 | } | 3839 | } |
| 3835 | #else | 3840 | #else |
| 3836 | #define CHALLENGE_LEN 64 | 3841 | #define CHALLENGE_LEN 64 |
| 3842 | |||
| 3843 | /* Return value: | ||
| 3844 | 1 - auth succeeded, | ||
| 3845 | 0 - failed, try again (network error), | ||
| 3846 | -1 - auth failed, don't try again. | ||
| 3847 | */ | ||
| 3848 | |||
| 3837 | static int drbd_do_auth(struct drbd_conf *mdev) | 3849 | static int drbd_do_auth(struct drbd_conf *mdev) |
| 3838 | { | 3850 | { |
| 3839 | char my_challenge[CHALLENGE_LEN]; /* 64 Bytes... */ | 3851 | char my_challenge[CHALLENGE_LEN]; /* 64 Bytes... */ |
| @@ -3854,7 +3866,7 @@ static int drbd_do_auth(struct drbd_conf *mdev) | |||
| 3854 | (u8 *)mdev->net_conf->shared_secret, key_len); | 3866 | (u8 *)mdev->net_conf->shared_secret, key_len); |
| 3855 | if (rv) { | 3867 | if (rv) { |
| 3856 | dev_err(DEV, "crypto_hash_setkey() failed with %d\n", rv); | 3868 | dev_err(DEV, "crypto_hash_setkey() failed with %d\n", rv); |
| 3857 | rv = 0; | 3869 | rv = -1; |
| 3858 | goto fail; | 3870 | goto fail; |
| 3859 | } | 3871 | } |
| 3860 | 3872 | ||
| @@ -3877,14 +3889,14 @@ static int drbd_do_auth(struct drbd_conf *mdev) | |||
| 3877 | 3889 | ||
| 3878 | if (p.length > CHALLENGE_LEN*2) { | 3890 | if (p.length > CHALLENGE_LEN*2) { |
| 3879 | dev_err(DEV, "expected AuthChallenge payload too big.\n"); | 3891 | dev_err(DEV, "expected AuthChallenge payload too big.\n"); |
| 3880 | rv = 0; | 3892 | rv = -1; |
| 3881 | goto fail; | 3893 | goto fail; |
| 3882 | } | 3894 | } |
| 3883 | 3895 | ||
| 3884 | peers_ch = kmalloc(p.length, GFP_NOIO); | 3896 | peers_ch = kmalloc(p.length, GFP_NOIO); |
| 3885 | if (peers_ch == NULL) { | 3897 | if (peers_ch == NULL) { |
| 3886 | dev_err(DEV, "kmalloc of peers_ch failed\n"); | 3898 | dev_err(DEV, "kmalloc of peers_ch failed\n"); |
| 3887 | rv = 0; | 3899 | rv = -1; |
| 3888 | goto fail; | 3900 | goto fail; |
| 3889 | } | 3901 | } |
| 3890 | 3902 | ||
| @@ -3900,7 +3912,7 @@ static int drbd_do_auth(struct drbd_conf *mdev) | |||
| 3900 | response = kmalloc(resp_size, GFP_NOIO); | 3912 | response = kmalloc(resp_size, GFP_NOIO); |
| 3901 | if (response == NULL) { | 3913 | if (response == NULL) { |
| 3902 | dev_err(DEV, "kmalloc of response failed\n"); | 3914 | dev_err(DEV, "kmalloc of response failed\n"); |
| 3903 | rv = 0; | 3915 | rv = -1; |
| 3904 | goto fail; | 3916 | goto fail; |
| 3905 | } | 3917 | } |
| 3906 | 3918 | ||
| @@ -3910,7 +3922,7 @@ static int drbd_do_auth(struct drbd_conf *mdev) | |||
| 3910 | rv = crypto_hash_digest(&desc, &sg, sg.length, response); | 3922 | rv = crypto_hash_digest(&desc, &sg, sg.length, response); |
| 3911 | if (rv) { | 3923 | if (rv) { |
| 3912 | dev_err(DEV, "crypto_hash_digest() failed with %d\n", rv); | 3924 | dev_err(DEV, "crypto_hash_digest() failed with %d\n", rv); |
| 3913 | rv = 0; | 3925 | rv = -1; |
| 3914 | goto fail; | 3926 | goto fail; |
| 3915 | } | 3927 | } |
| 3916 | 3928 | ||
| @@ -3944,9 +3956,9 @@ static int drbd_do_auth(struct drbd_conf *mdev) | |||
| 3944 | } | 3956 | } |
| 3945 | 3957 | ||
| 3946 | right_response = kmalloc(resp_size, GFP_NOIO); | 3958 | right_response = kmalloc(resp_size, GFP_NOIO); |
| 3947 | if (response == NULL) { | 3959 | if (right_response == NULL) { |
| 3948 | dev_err(DEV, "kmalloc of right_response failed\n"); | 3960 | dev_err(DEV, "kmalloc of right_response failed\n"); |
| 3949 | rv = 0; | 3961 | rv = -1; |
| 3950 | goto fail; | 3962 | goto fail; |
| 3951 | } | 3963 | } |
| 3952 | 3964 | ||
| @@ -3955,7 +3967,7 @@ static int drbd_do_auth(struct drbd_conf *mdev) | |||
| 3955 | rv = crypto_hash_digest(&desc, &sg, sg.length, right_response); | 3967 | rv = crypto_hash_digest(&desc, &sg, sg.length, right_response); |
| 3956 | if (rv) { | 3968 | if (rv) { |
| 3957 | dev_err(DEV, "crypto_hash_digest() failed with %d\n", rv); | 3969 | dev_err(DEV, "crypto_hash_digest() failed with %d\n", rv); |
| 3958 | rv = 0; | 3970 | rv = -1; |
| 3959 | goto fail; | 3971 | goto fail; |
| 3960 | } | 3972 | } |
| 3961 | 3973 | ||
| @@ -3964,6 +3976,8 @@ static int drbd_do_auth(struct drbd_conf *mdev) | |||
| 3964 | if (rv) | 3976 | if (rv) |
| 3965 | dev_info(DEV, "Peer authenticated using %d bytes of '%s' HMAC\n", | 3977 | dev_info(DEV, "Peer authenticated using %d bytes of '%s' HMAC\n", |
| 3966 | resp_size, mdev->net_conf->cram_hmac_alg); | 3978 | resp_size, mdev->net_conf->cram_hmac_alg); |
| 3979 | else | ||
| 3980 | rv = -1; | ||
| 3967 | 3981 | ||
| 3968 | fail: | 3982 | fail: |
| 3969 | kfree(peers_ch); | 3983 | kfree(peers_ch); |
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c index be625475cf6d..4b22feb01a0c 100644 --- a/drivers/md/dm-table.c +++ b/drivers/md/dm-table.c | |||
| @@ -503,16 +503,15 @@ int dm_set_device_limits(struct dm_target *ti, struct dm_dev *dev, | |||
| 503 | return 0; | 503 | return 0; |
| 504 | } | 504 | } |
| 505 | 505 | ||
| 506 | if (blk_stack_limits(limits, &q->limits, start << 9) < 0) | 506 | if (bdev_stack_limits(limits, bdev, start) < 0) |
| 507 | DMWARN("%s: target device %s is misaligned: " | 507 | DMWARN("%s: adding target device %s caused an alignment inconsistency: " |
| 508 | "physical_block_size=%u, logical_block_size=%u, " | 508 | "physical_block_size=%u, logical_block_size=%u, " |
| 509 | "alignment_offset=%u, start=%llu", | 509 | "alignment_offset=%u, start=%llu", |
| 510 | dm_device_name(ti->table->md), bdevname(bdev, b), | 510 | dm_device_name(ti->table->md), bdevname(bdev, b), |
| 511 | q->limits.physical_block_size, | 511 | q->limits.physical_block_size, |
| 512 | q->limits.logical_block_size, | 512 | q->limits.logical_block_size, |
| 513 | q->limits.alignment_offset, | 513 | q->limits.alignment_offset, |
| 514 | (unsigned long long) start << 9); | 514 | (unsigned long long) start << SECTOR_SHIFT); |
| 515 | |||
| 516 | 515 | ||
| 517 | /* | 516 | /* |
| 518 | * Check if merge fn is supported. | 517 | * Check if merge fn is supported. |
| @@ -1026,9 +1025,9 @@ combine_limits: | |||
| 1026 | * for the table. | 1025 | * for the table. |
| 1027 | */ | 1026 | */ |
| 1028 | if (blk_stack_limits(limits, &ti_limits, 0) < 0) | 1027 | if (blk_stack_limits(limits, &ti_limits, 0) < 0) |
| 1029 | DMWARN("%s: target device " | 1028 | DMWARN("%s: adding target device " |
| 1030 | "(start sect %llu len %llu) " | 1029 | "(start sect %llu len %llu) " |
| 1031 | "is misaligned", | 1030 | "caused an alignment inconsistency", |
| 1032 | dm_device_name(table->md), | 1031 | dm_device_name(table->md), |
| 1033 | (unsigned long long) ti->begin, | 1032 | (unsigned long long) ti->begin, |
| 1034 | (unsigned long long) ti->len); | 1033 | (unsigned long long) ti->len); |
| @@ -1080,15 +1079,6 @@ void dm_table_set_restrictions(struct dm_table *t, struct request_queue *q, | |||
| 1080 | struct queue_limits *limits) | 1079 | struct queue_limits *limits) |
| 1081 | { | 1080 | { |
| 1082 | /* | 1081 | /* |
| 1083 | * Each target device in the table has a data area that should normally | ||
| 1084 | * be aligned such that the DM device's alignment_offset is 0. | ||
| 1085 | * FIXME: Propagate alignment_offsets up the stack and warn of | ||
| 1086 | * sub-optimal or inconsistent settings. | ||
| 1087 | */ | ||
| 1088 | limits->alignment_offset = 0; | ||
| 1089 | limits->misaligned = 0; | ||
| 1090 | |||
| 1091 | /* | ||
| 1092 | * Copy table's limits to the DM device's request_queue | 1082 | * Copy table's limits to the DM device's request_queue |
| 1093 | */ | 1083 | */ |
| 1094 | q->limits = *limits; | 1084 | q->limits = *limits; |
