Merge git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-3.0-fixes
Pull gfs2 fixes from Steven Whitehouse: "This time there are just four fixes. There are a couple of minor updates to the quota code, a fix for KConfig to ensure that only valid combinations including GFS2 can be built, and a fix for a typo affecting end i/o processing when writing the journal. Also, there is a temporary fix for a performance regression relating to block reservations and directories. A longer fix will be applied in due course, but this deals with the most immediate problem for now" * git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-3.0-fixes: GFS2: Fix typo in gfs2_log_end_write loop GFS2: fix DLM depends to fix build errors GFS2: Use single-block reservations for directories GFS2: two minor quota fixups
This commit is contained in:
commit
0e255f1c0c
|
@ -26,7 +26,7 @@ config GFS2_FS
|
||||||
config GFS2_FS_LOCKING_DLM
|
config GFS2_FS_LOCKING_DLM
|
||||||
bool "GFS2 DLM locking"
|
bool "GFS2 DLM locking"
|
||||||
depends on (GFS2_FS!=n) && NET && INET && (IPV6 || IPV6=n) && \
|
depends on (GFS2_FS!=n) && NET && INET && (IPV6 || IPV6=n) && \
|
||||||
HOTPLUG && DLM && CONFIGFS_FS && SYSFS
|
HOTPLUG && CONFIGFS_FS && SYSFS && (DLM=y || DLM=GFS2_FS)
|
||||||
help
|
help
|
||||||
Multiple node locking module for GFS2
|
Multiple node locking module for GFS2
|
||||||
|
|
||||||
|
|
|
@ -212,7 +212,7 @@ static void gfs2_end_log_write(struct bio *bio, int error)
|
||||||
fs_err(sdp, "Error %d writing to log\n", error);
|
fs_err(sdp, "Error %d writing to log\n", error);
|
||||||
}
|
}
|
||||||
|
|
||||||
bio_for_each_segment(bvec, bio, i) {
|
bio_for_each_segment_all(bvec, bio, i) {
|
||||||
page = bvec->bv_page;
|
page = bvec->bv_page;
|
||||||
if (page_has_buffers(page))
|
if (page_has_buffers(page))
|
||||||
gfs2_end_log_write_bh(sdp, bvec, error);
|
gfs2_end_log_write_bh(sdp, bvec, error);
|
||||||
|
|
|
@ -121,7 +121,7 @@ static u64 qd2index(struct gfs2_quota_data *qd)
|
||||||
{
|
{
|
||||||
struct kqid qid = qd->qd_id;
|
struct kqid qid = qd->qd_id;
|
||||||
return (2 * (u64)from_kqid(&init_user_ns, qid)) +
|
return (2 * (u64)from_kqid(&init_user_ns, qid)) +
|
||||||
(qid.type == USRQUOTA) ? 0 : 1;
|
((qid.type == USRQUOTA) ? 0 : 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static u64 qd2offset(struct gfs2_quota_data *qd)
|
static u64 qd2offset(struct gfs2_quota_data *qd)
|
||||||
|
@ -721,7 +721,7 @@ get_a_page:
|
||||||
goto unlock_out;
|
goto unlock_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
gfs2_trans_add_meta(ip->i_gl, bh);
|
gfs2_trans_add_data(ip->i_gl, bh);
|
||||||
|
|
||||||
kaddr = kmap_atomic(page);
|
kaddr = kmap_atomic(page);
|
||||||
if (offset + sizeof(struct gfs2_quota) > PAGE_CACHE_SIZE)
|
if (offset + sizeof(struct gfs2_quota) > PAGE_CACHE_SIZE)
|
||||||
|
|
|
@ -1401,9 +1401,14 @@ static void rg_mblk_search(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip,
|
||||||
u32 extlen;
|
u32 extlen;
|
||||||
u32 free_blocks = rgd->rd_free_clone - rgd->rd_reserved;
|
u32 free_blocks = rgd->rd_free_clone - rgd->rd_reserved;
|
||||||
int ret;
|
int ret;
|
||||||
|
struct inode *inode = &ip->i_inode;
|
||||||
|
|
||||||
extlen = max_t(u32, atomic_read(&rs->rs_sizehint), requested);
|
if (S_ISDIR(inode->i_mode))
|
||||||
extlen = clamp(extlen, RGRP_RSRV_MINBLKS, free_blocks);
|
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))
|
if ((rgd->rd_free_clone < rgd->rd_reserved) || (free_blocks < extlen))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue