Hi This supposedly fixes the loop and dm-bufio deadlock observed by Zdenek. The deadlock is not reproducible. There are many other loop-based deadlocks in the kernel. Mikulas From: mpatocka@xxxxxxxxxx The shrinker uses gfp flags to indicate what kind of operation can the driver wait for. If __GFP_IO flag is present, the driver can wait for block I/O operations, if __GFP_FS flag is present, the driver can wait on operations involving the filesystem. dm-bufio tested for __GFP_IO. However, dm-bufio can run on a loop block device that makes calls into the filesystem. If __GFP_IO is present and __GFP_FS isn't, dm-bufio could still block on filesystem operations if it runs on a loop block device. The change from __GFP_IO to __GFP_FS supposedly fixes one observed (though unreproducible) deadlock involving dm-bufio and loop device. Signed-off-by: Mikulas Patocka <mpatocka@xxxxxxxxxx> Cc: stable@xxxxxxxxxxxxxxx --- drivers/md/dm-bufio.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) Index: linux-3.17/drivers/md/dm-bufio.c =================================================================== --- linux-3.17.orig/drivers/md/dm-bufio.c 2014-10-16 16:57:26.000000000 +0200 +++ linux-3.17/drivers/md/dm-bufio.c 2014-10-16 16:57:35.000000000 +0200 @@ -1491,7 +1491,7 @@ static int __cleanup_old_buffer(struct d if (jiffies - b->last_accessed < max_jiffies) return 0; - if (!(gfp & __GFP_IO)) { + if (!(gfp & __GFP_FS)) { if (test_bit(B_READING, &b->state) || test_bit(B_WRITING, &b->state) || test_bit(B_DIRTY, &b->state)) @@ -1533,7 +1533,7 @@ dm_bufio_shrink_scan(struct shrinker *sh unsigned long freed; c = container_of(shrink, struct dm_bufio_client, shrinker); - if (sc->gfp_mask & __GFP_IO) + if (sc->gfp_mask & __GFP_FS) dm_bufio_lock(c); else if (!dm_bufio_trylock(c)) return SHRINK_STOP; @@ -1550,7 +1550,7 @@ dm_bufio_shrink_count(struct shrinker *s unsigned long count; c = container_of(shrink, struct dm_bufio_client, shrinker); - if (sc->gfp_mask & __GFP_IO) + if (sc->gfp_mask & __GFP_FS) dm_bufio_lock(c); else if (!dm_bufio_trylock(c)) return 0; -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel