All of lore.kernel.org
 help / color / mirror / Atom feed
* [Ocfs2-devel] [PATCH 0/2] ocfs2: two bug fixes about xattr and inline-data V2
@ 2009-03-05  3:02 Tiger Yang
  2009-03-05  3:05 ` [Ocfs2-devel] [PATCH 1/2] ocfs2: reserve xattr block for new directory with inline data Tiger Yang
  2009-03-05  3:06 ` [Ocfs2-devel] [PATCH 2/2] ocfs2: tweak to get the maximum inline data size with xattr Tiger Yang
  0 siblings, 2 replies; 8+ messages in thread
From: Tiger Yang @ 2009-03-05  3:02 UTC (permalink / raw)
  To: ocfs2-devel

Hi,

Thanks Tao and Joel's review, These are the second version of the patches.

Mark and Joel, you can correct my comments if you find they don't suitable.

thanks,
tiger

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Ocfs2-devel] [PATCH 1/2] ocfs2: reserve xattr block for new directory with inline data
  2009-03-05  3:02 [Ocfs2-devel] [PATCH 0/2] ocfs2: two bug fixes about xattr and inline-data V2 Tiger Yang
@ 2009-03-05  3:05 ` Tiger Yang
  2009-03-05  3:17   ` Tao Ma
  2009-03-05  3:06 ` [Ocfs2-devel] [PATCH 2/2] ocfs2: tweak to get the maximum inline data size with xattr Tiger Yang
  1 sibling, 1 reply; 8+ messages in thread
From: Tiger Yang @ 2009-03-05  3:05 UTC (permalink / raw)
  To: ocfs2-devel

If this is a new directory with inline data, we choose to reserve
the entire inline area for directory contents and force an external
xattr block.

Signed-off-by: Tiger Yang <tiger.yang@oracle.com>
---
 fs/ocfs2/xattr.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
index 4ddd788..053ae3d 100644
--- a/fs/ocfs2/xattr.c
+++ b/fs/ocfs2/xattr.c
@@ -549,6 +549,7 @@ int ocfs2_calc_xattr_init(struct inode *dir,
 	 * for them is ok.
 	 */
 	if (dir->i_sb->s_blocksize == OCFS2_MIN_BLOCKSIZE ||
+	    (S_ISDIR(mode) && ocfs2_supports_inline_data(osb)) ||
 	    (s_size + a_size) > OCFS2_XATTR_FREE_IN_IBODY) {
 		ret = ocfs2_reserve_new_metadata_blocks(osb, 1, xattr_ac);
 		if (ret) {
-- 
1.5.4.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [Ocfs2-devel] [PATCH 2/2] ocfs2: tweak to get the maximum inline data size with xattr
  2009-03-05  3:02 [Ocfs2-devel] [PATCH 0/2] ocfs2: two bug fixes about xattr and inline-data V2 Tiger Yang
  2009-03-05  3:05 ` [Ocfs2-devel] [PATCH 1/2] ocfs2: reserve xattr block for new directory with inline data Tiger Yang
@ 2009-03-05  3:06 ` Tiger Yang
  2009-03-05 23:32   ` Joel Becker
  1 sibling, 1 reply; 8+ messages in thread
From: Tiger Yang @ 2009-03-05  3:06 UTC (permalink / raw)
  To: ocfs2-devel

Replace max_inline_data with max_inline_data_with_xattr
to ensure it correct when xattr inlined.

Signed-off-by: Tiger Yang <tiger.yang@oracle.com>
---
 fs/ocfs2/aops.c     |    7 +++++--
 fs/ocfs2/namei.c    |    3 ++-
 fs/ocfs2/ocfs2_fs.h |    6 ------
 3 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c
index a067a6c..8e1709a 100644
--- a/fs/ocfs2/aops.c
+++ b/fs/ocfs2/aops.c
@@ -227,7 +227,7 @@ int ocfs2_read_inline_data(struct inode *inode, struct page *page,
 	size = i_size_read(inode);
 
 	if (size > PAGE_CACHE_SIZE ||
-	    size > ocfs2_max_inline_data(inode->i_sb)) {
+	    size > ocfs2_max_inline_data_with_xattr(inode->i_sb, di)) {
 		ocfs2_error(inode->i_sb,
 			    "Inode %llu has with inline data has bad size: %Lu",
 			    (unsigned long long)OCFS2_I(inode)->ip_blkno,
@@ -1555,6 +1555,7 @@ static int ocfs2_try_to_write_inline_data(struct address_space *mapping,
 	int ret, written = 0;
 	loff_t end = pos + len;
 	struct ocfs2_inode_info *oi = OCFS2_I(inode);
+	struct ocfs2_dinode *di = NULL;
 
 	mlog(0, "Inode %llu, write of %u bytes at off %llu. features: 0x%x\n",
 	     (unsigned long long)oi->ip_blkno, len, (unsigned long long)pos,
@@ -1587,7 +1588,9 @@ static int ocfs2_try_to_write_inline_data(struct address_space *mapping,
 	/*
 	 * Check whether the write can fit.
 	 */
-	if (mmap_page || end > ocfs2_max_inline_data(inode->i_sb))
+	di = (struct ocfs2_dinode *)wc->w_di_bh->b_data;
+	if (mmap_page ||
+	    end > ocfs2_max_inline_data_with_xattr(inode->i_sb, di))
 		return 0;
 
 do_inline_write:
diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c
index 084aba8..4b11762 100644
--- a/fs/ocfs2/namei.c
+++ b/fs/ocfs2/namei.c
@@ -532,7 +532,8 @@ static int ocfs2_mknod_locked(struct ocfs2_super *osb,
 
 		fe->i_dyn_features = cpu_to_le16(feat | OCFS2_INLINE_DATA_FL);
 
-		fe->id2.i_data.id_count = cpu_to_le16(ocfs2_max_inline_data(osb->sb));
+		fe->id2.i_data.id_count = cpu_to_le16(
+				ocfs2_max_inline_data_with_xattr(osb->sb, fe));
 	} else {
 		fel = &fe->id2.i_list;
 		fel->l_tree_depth = 0;
diff --git a/fs/ocfs2/ocfs2_fs.h b/fs/ocfs2/ocfs2_fs.h
index c7ae45a..2332ef7 100644
--- a/fs/ocfs2/ocfs2_fs.h
+++ b/fs/ocfs2/ocfs2_fs.h
@@ -1070,12 +1070,6 @@ static inline int ocfs2_fast_symlink_chars(struct super_block *sb)
 		 offsetof(struct ocfs2_dinode, id2.i_symlink);
 }
 
-static inline int ocfs2_max_inline_data(struct super_block *sb)
-{
-	return sb->s_blocksize -
-		offsetof(struct ocfs2_dinode, id2.i_data.id_data);
-}
-
 static inline int ocfs2_max_inline_data_with_xattr(struct super_block *sb,
 						   struct ocfs2_dinode *di)
 {
-- 
1.5.4.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [Ocfs2-devel] [PATCH 1/2] ocfs2: reserve xattr block for new directory with inline data
  2009-03-05  3:05 ` [Ocfs2-devel] [PATCH 1/2] ocfs2: reserve xattr block for new directory with inline data Tiger Yang
@ 2009-03-05  3:17   ` Tao Ma
  2009-03-05 23:30     ` Joel Becker
  0 siblings, 1 reply; 8+ messages in thread
From: Tao Ma @ 2009-03-05  3:17 UTC (permalink / raw)
  To: ocfs2-devel

Hi tiger,
	I guess Joel's idea is that you add comment above the code. Not in the 
commit log. ;)

Regards,
Tao

Tiger Yang wrote:
> If this is a new directory with inline data, we choose to reserve
> the entire inline area for directory contents and force an external
> xattr block.
> 
> Signed-off-by: Tiger Yang <tiger.yang@oracle.com>
> ---
>  fs/ocfs2/xattr.c |    1 +
>  1 files changed, 1 insertions(+), 0 deletions(-)
> 
> diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
> index 4ddd788..053ae3d 100644
> --- a/fs/ocfs2/xattr.c
> +++ b/fs/ocfs2/xattr.c
> @@ -549,6 +549,7 @@ int ocfs2_calc_xattr_init(struct inode *dir,
>  	 * for them is ok.
>  	 */
>  	if (dir->i_sb->s_blocksize == OCFS2_MIN_BLOCKSIZE ||
> +	    (S_ISDIR(mode) && ocfs2_supports_inline_data(osb)) ||
>  	    (s_size + a_size) > OCFS2_XATTR_FREE_IN_IBODY) {
>  		ret = ocfs2_reserve_new_metadata_blocks(osb, 1, xattr_ac);
>  		if (ret) {

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Ocfs2-devel] [PATCH 1/2] ocfs2: reserve xattr block for new directory with inline data
  2009-03-05  3:17   ` Tao Ma
@ 2009-03-05 23:30     ` Joel Becker
  2009-03-06  2:19       ` Tiger Yang
  0 siblings, 1 reply; 8+ messages in thread
From: Joel Becker @ 2009-03-05 23:30 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Mar 05, 2009 at 11:17:14AM +0800, Tao Ma wrote:
> Hi tiger,
> 	I guess Joel's idea is that you add comment above the code. Not in the 
> commit log. ;)

	The commit log is good, but the comment should also be added to
the code.  Tao is right that's what I was asking for :-)  You'll note
that the comment above the if() describes the cases in which we skip
inline xattrs.  You've added another reason to skip inline xattrs, so
that comment should include your reason.
	Literally, cut and past your commit log into that comment block.

Joel

-- 

"The question of whether computers can think is just like the question
 of whether submarines can swim."
	- Edsger W. Dijkstra

Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Ocfs2-devel] [PATCH 2/2] ocfs2: tweak to get the maximum inline data size with xattr
  2009-03-05  3:06 ` [Ocfs2-devel] [PATCH 2/2] ocfs2: tweak to get the maximum inline data size with xattr Tiger Yang
@ 2009-03-05 23:32   ` Joel Becker
  0 siblings, 0 replies; 8+ messages in thread
From: Joel Becker @ 2009-03-05 23:32 UTC (permalink / raw)
  To: ocfs2-devel

On Thu, Mar 05, 2009 at 11:06:15AM +0800, Tiger Yang wrote:
> Replace max_inline_data with max_inline_data_with_xattr
> to ensure it correct when xattr inlined.
> 
> Signed-off-by: Tiger Yang <tiger.yang@oracle.com>
Acked-by: Joel Becker <joel.becker@oracle.com>

Probably want to make sure the same problem doesn't affect ocfs2-tools.

Joel

-- 

"If the human brain were so simple we could understand it, we would
 be so simple that we could not."
	- W. A. Clouston

Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Ocfs2-devel] [PATCH 1/2] ocfs2: reserve xattr block for new directory with inline data
  2009-03-05 23:30     ` Joel Becker
@ 2009-03-06  2:19       ` Tiger Yang
  2009-03-06  2:36         ` Joel Becker
  0 siblings, 1 reply; 8+ messages in thread
From: Tiger Yang @ 2009-03-06  2:19 UTC (permalink / raw)
  To: ocfs2-devel

If this is a new directory with inline data, we choose to
reserve the entire inline area for directory contents and
force an external xattr block.

Signed-off-by: Tiger Yang <tiger.yang@oracle.com>
---
 fs/ocfs2/xattr.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
index 4ddd788..c63efb5 100644
--- a/fs/ocfs2/xattr.c
+++ b/fs/ocfs2/xattr.c
@@ -547,8 +547,12 @@ int ocfs2_calc_xattr_init(struct inode *dir,
 	 * when blocksize = 512, may reserve one more cluser for
 	 * xattr bucket, otherwise reserve one metadata block
 	 * for them is ok.
+	 * If this is a new directory with inline data,
+	 * we choose to reserve the entire inline area for
+	 * directory contents and force an external xattr block.
 	 */
 	if (dir->i_sb->s_blocksize == OCFS2_MIN_BLOCKSIZE ||
+	    (S_ISDIR(mode) && ocfs2_supports_inline_data(osb)) ||
 	    (s_size + a_size) > OCFS2_XATTR_FREE_IN_IBODY) {
 		ret = ocfs2_reserve_new_metadata_blocks(osb, 1, xattr_ac);
 		if (ret) {
-- 
1.5.4.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [Ocfs2-devel] [PATCH 1/2] ocfs2: reserve xattr block for new directory with inline data
  2009-03-06  2:19       ` Tiger Yang
@ 2009-03-06  2:36         ` Joel Becker
  0 siblings, 0 replies; 8+ messages in thread
From: Joel Becker @ 2009-03-06  2:36 UTC (permalink / raw)
  To: ocfs2-devel

On Fri, Mar 06, 2009 at 10:19:30AM +0800, Tiger Yang wrote:
> If this is a new directory with inline data, we choose to
> reserve the entire inline area for directory contents and
> force an external xattr block.
> 
> Signed-off-by: Tiger Yang <tiger.yang@oracle.com>
Acked-by: Joel Becker <joel.becker@oracle.com>


-- 

"To fall in love is to create a religion that has a fallible god."
        -Jorge Luis Borges

Joel Becker
Principal Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2009-03-06  2:36 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-05  3:02 [Ocfs2-devel] [PATCH 0/2] ocfs2: two bug fixes about xattr and inline-data V2 Tiger Yang
2009-03-05  3:05 ` [Ocfs2-devel] [PATCH 1/2] ocfs2: reserve xattr block for new directory with inline data Tiger Yang
2009-03-05  3:17   ` Tao Ma
2009-03-05 23:30     ` Joel Becker
2009-03-06  2:19       ` Tiger Yang
2009-03-06  2:36         ` Joel Becker
2009-03-05  3:06 ` [Ocfs2-devel] [PATCH 2/2] ocfs2: tweak to get the maximum inline data size with xattr Tiger Yang
2009-03-05 23:32   ` Joel Becker

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.