aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/gcov
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2012-10-10 22:44:30 -0400
committerNeilBrown <neilb@suse.de>2012-10-10 22:44:30 -0400
commit7ad4d4a68a1a19f21c7b39cb3f51bf17fba6e3d0 (patch)
tree9a93ab26f6354988241dc003a9ab16b77a3d75d3 /kernel/gcov
parentfd177481b440c3f7b5ee9b821a76b29fdf2a6712 (diff)
md/raid1: Don't release reference to device while handling read error.
When we get a read error, we arrange for raid1d to handle it. Currently we release the reference on the device. This can result in conf->mirrors[read_disk].rdev being NULL in fix_read_error, if the device happens to get removed before the read error is handled. So instead keep the reference until the read error has been fully handled. Reported-by: hank <pyu@redhat.com> Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'kernel/gcov')
0 files changed, 0 insertions, 0 deletions
hl opt">; struct mm_struct; /* task is in do_exit() */ void profile_task_exit(struct task_struct * task); /* task is dead, free task struct ? Returns 1 if * the task was taken, 0 if the task should be freed. */ int profile_handoff_task(struct task_struct * task); /* sys_munmap */ void profile_munmap(unsigned long addr); int task_handoff_register(struct notifier_block * n); int task_handoff_unregister(struct notifier_block * n); int profile_event_register(enum profile_type, struct notifier_block * n); int profile_event_unregister(enum profile_type, struct notifier_block * n); int register_timer_hook(int (*hook)(struct pt_regs *)); void unregister_timer_hook(int (*hook)(struct pt_regs *)); struct pt_regs; #else #define prof_on 0 static inline void profile_init(void) { return; } static inline void profile_tick(int type) { return; } static inline void profile_hits(int type, void *ip, unsigned int nr_hits) { return; } static inline void profile_hit(int type, void *ip) { return; } static inline int task_handoff_register(struct notifier_block * n) { return -ENOSYS; } static inline int task_handoff_unregister(struct notifier_block * n) { return -ENOSYS; } static inline int profile_event_register(enum profile_type t, struct notifier_block * n) { return -ENOSYS; } static inline int profile_event_unregister(enum profile_type t, struct notifier_block * n) { return -ENOSYS; } #define profile_task_exit(a) do { } while (0) #define profile_handoff_task(a) (0) #define profile_munmap(a) do { } while (0) static inline int register_timer_hook(int (*hook)(struct pt_regs *)) { return -ENOSYS; } static inline void unregister_timer_hook(int (*hook)(struct pt_regs *)) { return; } #endif /* CONFIG_PROFILING */ #endif /* _LINUX_PROFILE_H */