- A couple fixes for bugs introduced as part of the blk_status_t block
layer changes during the 4.13 merge window - A printk throttling fix to use discrete rate limiting state for each DM log level - A stable@ fix for DM multipath that delays request requeueing to avoid CPU lockup if/when the request queue is "dying" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJZqHWPAAoJEMUj8QotnQNa3XEIAKBpXpoqRPYB4sRk2zBxW0ca 5mWRbiBk5psRAkUIPvTJrCrrh8yieRaNBonNw2eBKgGoZ0kpJ5+YCQgo89Zre3yy YJv3Ifu3eWpPFkceSuoUuv1wIqA/gFGzShSJWlQDJJlumOE+em9OupNWNoJQLoEZ WR12r1EWosxtotpsC3Wb0IfUjOzdeQ6qSAfRX0BW4utzsIEm7r0fkw4vZOl6WTj5 8QwhMxud5DoJmMoOUluGWg8tEJssh3C3Mn+R66DHASyvoPayokbmpRUMkibVDGmF CVO4IW1WJt9s0t9vBg88kvV5aEHLsvvhj6As12quwsBy8cBD0iqJHogvh9cEyeo= =QT3Y -----END PGP SIGNATURE----- Merge tag 'for-4.13/dm-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm Pull device mapper fixes from Mike Snitzer: - A couple fixes for bugs introduced as part of the blk_status_t block layer changes during the 4.13 merge window - A printk throttling fix to use discrete rate limiting state for each DM log level - A stable@ fix for DM multipath that delays request requeueing to avoid CPU lockup if/when the request queue is "dying" * tag 'for-4.13/dm-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm: dm mpath: do not lock up a CPU with requeuing activity dm: fix printk() rate limiting code dm mpath: retry BLK_STS_RESOURCE errors dm: fix the second dec_pending() argument in __split_and_process_bio()
This commit is contained in:
commit
73adb8c5b0
3 changed files with 13 additions and 42 deletions
|
@ -504,7 +504,6 @@ static int multipath_clone_and_map(struct dm_target *ti, struct request *rq,
|
|||
if (queue_dying) {
|
||||
atomic_inc(&m->pg_init_in_progress);
|
||||
activate_or_offline_path(pgpath);
|
||||
return DM_MAPIO_REQUEUE;
|
||||
}
|
||||
return DM_MAPIO_DELAY_REQUEUE;
|
||||
}
|
||||
|
@ -1458,7 +1457,6 @@ static int noretry_error(blk_status_t error)
|
|||
case BLK_STS_TARGET:
|
||||
case BLK_STS_NEXUS:
|
||||
case BLK_STS_MEDIUM:
|
||||
case BLK_STS_RESOURCE:
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -27,16 +27,6 @@
|
|||
|
||||
#define DM_MSG_PREFIX "core"
|
||||
|
||||
#ifdef CONFIG_PRINTK
|
||||
/*
|
||||
* ratelimit state to be used in DMXXX_LIMIT().
|
||||
*/
|
||||
DEFINE_RATELIMIT_STATE(dm_ratelimit_state,
|
||||
DEFAULT_RATELIMIT_INTERVAL,
|
||||
DEFAULT_RATELIMIT_BURST);
|
||||
EXPORT_SYMBOL(dm_ratelimit_state);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Cookies are numeric values sent with CHANGE and REMOVE
|
||||
* uevents while resuming, removing or renaming the device.
|
||||
|
@ -1523,7 +1513,7 @@ static void __split_and_process_bio(struct mapped_device *md,
|
|||
}
|
||||
|
||||
/* drop the extra reference count */
|
||||
dec_pending(ci.io, error);
|
||||
dec_pending(ci.io, errno_to_blk_status(error));
|
||||
}
|
||||
/*-----------------------------------------------------------------
|
||||
* CRUD END
|
||||
|
|
|
@ -549,46 +549,29 @@ void *dm_vcalloc(unsigned long nmemb, unsigned long elem_size);
|
|||
*---------------------------------------------------------------*/
|
||||
#define DM_NAME "device-mapper"
|
||||
|
||||
#ifdef CONFIG_PRINTK
|
||||
extern struct ratelimit_state dm_ratelimit_state;
|
||||
|
||||
#define dm_ratelimit() __ratelimit(&dm_ratelimit_state)
|
||||
#else
|
||||
#define dm_ratelimit() 0
|
||||
#endif
|
||||
#define DM_RATELIMIT(pr_func, fmt, ...) \
|
||||
do { \
|
||||
static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL, \
|
||||
DEFAULT_RATELIMIT_BURST); \
|
||||
\
|
||||
if (__ratelimit(&rs)) \
|
||||
pr_func(DM_FMT(fmt), ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define DM_FMT(fmt) DM_NAME ": " DM_MSG_PREFIX ": " fmt "\n"
|
||||
|
||||
#define DMCRIT(fmt, ...) pr_crit(DM_FMT(fmt), ##__VA_ARGS__)
|
||||
|
||||
#define DMERR(fmt, ...) pr_err(DM_FMT(fmt), ##__VA_ARGS__)
|
||||
#define DMERR_LIMIT(fmt, ...) \
|
||||
do { \
|
||||
if (dm_ratelimit()) \
|
||||
DMERR(fmt, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define DMERR_LIMIT(fmt, ...) DM_RATELIMIT(pr_err, fmt, ##__VA_ARGS__)
|
||||
#define DMWARN(fmt, ...) pr_warn(DM_FMT(fmt), ##__VA_ARGS__)
|
||||
#define DMWARN_LIMIT(fmt, ...) \
|
||||
do { \
|
||||
if (dm_ratelimit()) \
|
||||
DMWARN(fmt, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#define DMWARN_LIMIT(fmt, ...) DM_RATELIMIT(pr_warn, fmt, ##__VA_ARGS__)
|
||||
#define DMINFO(fmt, ...) pr_info(DM_FMT(fmt), ##__VA_ARGS__)
|
||||
#define DMINFO_LIMIT(fmt, ...) \
|
||||
do { \
|
||||
if (dm_ratelimit()) \
|
||||
DMINFO(fmt, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
#define DMINFO_LIMIT(fmt, ...) DM_RATELIMIT(pr_info, fmt, ##__VA_ARGS__)
|
||||
|
||||
#ifdef CONFIG_DM_DEBUG
|
||||
#define DMDEBUG(fmt, ...) printk(KERN_DEBUG DM_FMT(fmt), ##__VA_ARGS__)
|
||||
#define DMDEBUG_LIMIT(fmt, ...) \
|
||||
do { \
|
||||
if (dm_ratelimit()) \
|
||||
DMDEBUG(fmt, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
#define DMDEBUG_LIMIT(fmt, ...) DM_RATELIMIT(pr_debug, fmt, ##__VA_ARGS__)
|
||||
#else
|
||||
#define DMDEBUG(fmt, ...) no_printk(fmt, ##__VA_ARGS__)
|
||||
#define DMDEBUG_LIMIT(fmt, ...) no_printk(fmt, ##__VA_ARGS__)
|
||||
|
|
Loading…
Reference in a new issue