Patchwork [V7,00/23] ext4: Add inline data support

login
register
mail settings
Submitter Theodore Ts'o
Date Dec. 10, 2012, 3:02 p.m.
Message ID <20121210150228.GA28666@thunk.org>
Download mbox | patch
Permalink /patch/204934/
State Rejected
Headers show

Comments

Theodore Ts'o - Dec. 10, 2012, 3:02 p.m.
On Fri, Dec 07, 2012 at 09:34:24AM +0800, Tao Ma wrote:
> I think ext4_inode->xattr_sem should protect us? When we do xattr
> corresponding operation, we just do
> down_write/read(&EXT4_I(inode)->xattr_sem), so we should be fine with
> this type of operation. Am I missing something here?

We're not taking the xattr_sem in ext4_find_inline_data() before we
call ext4_xattr_ibody_find().  So I think we need something like this:



					- Ted
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Tao Ma - Dec. 10, 2012, 3:17 p.m.
On 12/10/2012 11:02 PM, Theodore Ts'o wrote:
> On Fri, Dec 07, 2012 at 09:34:24AM +0800, Tao Ma wrote:
>> I think ext4_inode->xattr_sem should protect us? When we do xattr
>> corresponding operation, we just do
>> down_write/read(&EXT4_I(inode)->xattr_sem), so we should be fine with
>> this type of operation. Am I missing something here?
> 
> We're not taking the xattr_sem in ext4_find_inline_data() before we
> call ext4_xattr_ibody_find().  So I think we need something like this:
> 
> diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
> index 6b600b4..e96268d 100644
> --- a/fs/ext4/inline.c
> +++ b/fs/ext4/inline.c
> @@ -143,7 +143,9 @@ int ext4_find_inline_data(struct inode *inode)
>  	if (error)
>  		return error;
>  
> +	down_read(&EXT4_I(inode)->xattr_sem);
>  	error = ext4_xattr_ibody_find(inode, &i, &is);
> +	up_read(&EXT4_I(inode)->xattr_sem);
>  	if (error)
>  		goto out;
Actually ext4_find_inline_data is only called in ext4_iget when we
initialize an inode from the disk and that's the reason why I didn't add
this lock. So maybe the name isn't obvious to the reader.  :(

Having said that, I think it should be safe for us to add this lock so
that any future user may abuse it without any worry about the xattr
lock. So go ahead with it.

Thanks
Tao
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
index 6b600b4..e96268d 100644
--- a/fs/ext4/inline.c
+++ b/fs/ext4/inline.c
@@ -143,7 +143,9 @@  int ext4_find_inline_data(struct inode *inode)
 	if (error)
 		return error;
 
+	down_read(&EXT4_I(inode)->xattr_sem);
 	error = ext4_xattr_ibody_find(inode, &i, &is);
+	up_read(&EXT4_I(inode)->xattr_sem);
 	if (error)
 		goto out;