mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 01:04:19 +08:00
drbd: a few more GFP_KERNEL -> GFP_NOIO
This has not yet been observed, but conceivably, when using GFP_KERNEL allocations from drbd_md_sync(), drbd_flush_after_epoch() or receive_SyncParam(), we could trigger additional IO to our own device, or an other device in a criss-cross setup, and end up in a local deadlock, or potentially a distributed deadlock in a criss-cross setup involving the peer blocked in a similar way waiting for us to make progress. Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
This commit is contained in:
parent
bc891c9ae3
commit
8747d30af9
@ -2294,7 +2294,7 @@ static inline void drbd_md_flush(struct drbd_conf *mdev)
|
||||
if (test_bit(MD_NO_FUA, &mdev->flags))
|
||||
return;
|
||||
|
||||
r = blkdev_issue_flush(mdev->ldev->md_bdev, GFP_KERNEL, NULL);
|
||||
r = blkdev_issue_flush(mdev->ldev->md_bdev, GFP_NOIO, NULL);
|
||||
if (r) {
|
||||
set_bit(MD_NO_FUA, &mdev->flags);
|
||||
dev_err(DEV, "meta data flush failed with status %d, disabling md-flushes\n", r);
|
||||
|
@ -473,7 +473,7 @@ struct fifo_buffer *fifo_alloc(int fifo_size)
|
||||
{
|
||||
struct fifo_buffer *fb;
|
||||
|
||||
fb = kzalloc(sizeof(struct fifo_buffer) + sizeof(int) * fifo_size, GFP_KERNEL);
|
||||
fb = kzalloc(sizeof(struct fifo_buffer) + sizeof(int) * fifo_size, GFP_NOIO);
|
||||
if (!fb)
|
||||
return NULL;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user