提交 0e255f1c 编写于 作者: L Linus Torvalds

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
...@@ -26,7 +26,7 @@ config GFS2_FS ...@@ -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) ...@@ -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) ...@@ -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 @@ static int gfs2_adjust_quota(struct gfs2_inode *ip, loff_t loc, ...@@ -721,7 +721,7 @@ static int gfs2_adjust_quota(struct gfs2_inode *ip, loff_t loc,
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, ...@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册