diff options
author | KalimochoAz <calimochoazucarado@gmail.com> | 2012-07-27 01:24:03 +0200 |
---|---|---|
committer | KalimochoAz <calimochoazucarado@gmail.com> | 2012-07-27 01:24:03 +0200 |
commit | 3dfc3dfc7a13e46422f309fc03de421a765fb12c (patch) | |
tree | b018f6713bbfd63937a23b40708c3fb764e62222 /fs/buffer.c | |
parent | 042098f2e54409eda6b7324277aabd31aa359e28 (diff) | |
parent | ce05b1d31e57b7de6b814073e88bdd403ce71229 (diff) | |
download | kernel_samsung_crespo-3dfc3dfc7a13e46422f309fc03de421a765fb12c.zip kernel_samsung_crespo-3dfc3dfc7a13e46422f309fc03de421a765fb12c.tar.gz kernel_samsung_crespo-3dfc3dfc7a13e46422f309fc03de421a765fb12c.tar.bz2 |
Merge branch 'linux-3.0.y' into HEAD
Conflicts:
arch/arm/kernel/smp.c
Diffstat (limited to 'fs/buffer.c')
-rw-r--r-- | fs/buffer.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/fs/buffer.c b/fs/buffer.c index 330cbce..d421626 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -1084,6 +1084,9 @@ grow_buffers(struct block_device *bdev, sector_t block, int size) static struct buffer_head * __getblk_slow(struct block_device *bdev, sector_t block, int size) { + int ret; + struct buffer_head *bh; + /* Size must be multiple of hard sectorsize */ if (unlikely(size & (bdev_logical_block_size(bdev)-1) || (size < 512 || size > PAGE_SIZE))) { @@ -1096,20 +1099,21 @@ __getblk_slow(struct block_device *bdev, sector_t block, int size) return NULL; } - for (;;) { - struct buffer_head * bh; - int ret; +retry: + bh = __find_get_block(bdev, block, size); + if (bh) + return bh; + ret = grow_buffers(bdev, block, size); + if (ret == 0) { + free_more_memory(); + goto retry; + } else if (ret > 0) { bh = __find_get_block(bdev, block, size); if (bh) return bh; - - ret = grow_buffers(bdev, block, size); - if (ret < 0) - return NULL; - if (ret == 0) - free_more_memory(); } + return NULL; } /* |