Skip to contentSkip to conversation

Fix a wrong cluster calculation.

PATCH New [email protected] 2 participants 2 messages Sep 5, 2007 – Sep 6, 2007 1 message not in the archive OCFS2

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]

#1 lore raw

PATCH 1/1 Fix a wrong cluster calculation.

In ocfs2_alloc_write_write_ctxt, the written clusters length is calculated by the byte length only. This may cause some problems if we start to write at some position in the end of one cluster and last to a second cluster while the "len" is smaller than a cluster size. In that case, we have to write 2 clusters actually.
So we have to take the start position into consideration also.

---

fs/ocfs2/aops.c +3 -1
index 460d440..50cd8a2 100644
@@ -855,6 +855,7 @@ static int ocfs2_alloc_write_ctxt(struct
 				  struct ocfs2_super *osb, loff_t pos,
 				  unsigned len, struct buffer_head *di_bh)
 {
+	u32 cend;
 	struct ocfs2_write_ctxt *wc;
 
 	wc = kzalloc(sizeof(struct ocfs2_write_ctxt), GFP_NOFS);
@@ -862,7 +863,8 @@ static int ocfs2_alloc_write_ctxt(struct
 		return -ENOMEM;
 
 	wc->w_cpos = pos >> osb->s_clustersize_bits;
-	wc->w_clen = ocfs2_clusters_for_bytes(osb->sb, len);
+	cend = (pos + len - 1) >> osb->s_clustersize_bits;
+	wc->w_clen = cend - wc->w_cpos + 1;
 	get_bh(di_bh);
 	wc->w_di_bh = di_bh;
 
#2 lore raw

PATCH 1/1 Fix a wrong cluster calculation.

Quoted 6 lines · tao.ma

In ocfs2_alloc_write_write_ctxt, the written clusters length is calculated by the byte length only. This may cause some problems if we start to write at some position in the end of one cluster and last to a second cluster while the "len" is smaller than a cluster size. In that case, we have to write 2 clusters actually.
So we have to take the start position into consideration also.

Good catch Tao, thanks.

	--Mark

--
Mark Fasheh
Senior Software Developer, Oracle
[email protected]