----- Original Message ----- > Unconditionally call gfs2_adjust_reservation in gfs2_alloc_blocks. Move > the code for updating rd_free and rd_free_clone from gfs2_alloc_blocks > into gfs2_adjust_reservation. > > Signed-off-by: Andreas Gruenbacher <agrue...@redhat.com> > --- > fs/gfs2/rgrp.c | 26 ++++++++++++++++---------- > 1 file changed, 16 insertions(+), 10 deletions(-) > > diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c > index bbcf8b8b2597f..733e21cd4cf25 100644 > --- a/fs/gfs2/rgrp.c > +++ b/fs/gfs2/rgrp.c (snip) > - if (gfs2_rs_active(&ip->i_res)) > - gfs2_adjust_reservation(ip, &rbm, *nblocks); > + error = gfs2_adjust_reservation(ip, &rbm, *nblocks);
Wait. At what point do we require a reservation for all block allocations? In today's code, a reservation is not required, so the check for "if (gfs2_rs_active(&ip->i_res))" is necessary because you can't adjust a reservation that's not active (in the tree)...being within the tree determines whether the reservation is active or not. Yes, I'm looking forward to the day when we require a reservation for all block allocations as per my original version (this needs to happen to allow rgrp sharing between processes.) Perhaps a future patch will add the requirement, but at this point, there's no such requirement, which means this patch will probably break during a git bisect, no? We only get into this situation when all bitmaps are nearly full or fragmented and therefore no reservation will fit the minimum requirements, but we still need to allow small one-shot block allocations. So we need to do lots of full-bitmap testing. Or else we need to add this patch only after the patch that makes reservations mandatory. Regards, Bob Peterson