|
@@ -1401,9 +1401,14 @@ static void rg_mblk_search(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip,
|
|
|
u32 extlen;
|
|
|
u32 free_blocks = rgd->rd_free_clone - rgd->rd_reserved;
|
|
|
int ret;
|
|
|
+ struct inode *inode = &ip->i_inode;
|
|
|
|
|
|
- extlen = max_t(u32, atomic_read(&rs->rs_sizehint), requested);
|
|
|
- extlen = clamp(extlen, RGRP_RSRV_MINBLKS, free_blocks);
|
|
|
+ if (S_ISDIR(inode->i_mode))
|
|
|
+ extlen = 1;
|
|
|
+ else {
|
|
|
+ extlen = max_t(u32, atomic_read(&rs->rs_sizehint), requested);
|
|
|
+ extlen = clamp(extlen, RGRP_RSRV_MINBLKS, free_blocks);
|
|
|
+ }
|
|
|
if ((rgd->rd_free_clone < rgd->rd_reserved) || (free_blocks < extlen))
|
|
|
return;
|
|
|
|