On Mon 29-03-10 11:05:21, Dmitry Monakhov wrote: > generic setattr not longer responsible for quota transfer. > use udf_setattr for all udf's inodes. Thanks. Merged. Honza > > Signed-off-by: Dmitry Monakhov <dmonakhov@xxxxxxxxxx> > --- > fs/udf/file.c | 2 +- > fs/udf/inode.c | 2 +- > fs/udf/namei.c | 9 ++++++++- > fs/udf/udfdecl.h | 3 ++- > 4 files changed, 12 insertions(+), 4 deletions(-) > > diff --git a/fs/udf/file.c b/fs/udf/file.c > index 1eb0677..4b6a46c 100644 > --- a/fs/udf/file.c > +++ b/fs/udf/file.c > @@ -218,7 +218,7 @@ const struct file_operations udf_file_operations = { > .llseek = generic_file_llseek, > }; > > -static int udf_setattr(struct dentry *dentry, struct iattr *iattr) > +int udf_setattr(struct dentry *dentry, struct iattr *iattr) > { > struct inode *inode = dentry->d_inode; > int error; > diff --git a/fs/udf/inode.c b/fs/udf/inode.c > index c7da1a3..7d60558 100644 > --- a/fs/udf/inode.c > +++ b/fs/udf/inode.c > @@ -1314,7 +1314,7 @@ static void udf_fill_inode(struct inode *inode, struct buffer_head *bh) > break; > case ICBTAG_FILE_TYPE_SYMLINK: > inode->i_data.a_ops = &udf_symlink_aops; > - inode->i_op = &page_symlink_inode_operations; > + inode->i_op = &udf_symlink_inode_operations; > inode->i_mode = S_IFLNK | S_IRWXUGO; > break; > case ICBTAG_FILE_TYPE_MAIN: > diff --git a/fs/udf/namei.c b/fs/udf/namei.c > index 96757e3..1fdbee2 100644 > --- a/fs/udf/namei.c > +++ b/fs/udf/namei.c > @@ -925,7 +925,7 @@ static int udf_symlink(struct inode *dir, struct dentry *dentry, > iinfo = UDF_I(inode); > inode->i_mode = S_IFLNK | S_IRWXUGO; > inode->i_data.a_ops = &udf_symlink_aops; > - inode->i_op = &page_symlink_inode_operations; > + inode->i_op = &udf_symlink_inode_operations; > > if (iinfo->i_alloc_type != ICBTAG_FLAG_AD_IN_ICB) { > struct kernel_lb_addr eloc; > @@ -1393,6 +1393,7 @@ const struct export_operations udf_export_ops = { > const struct inode_operations udf_dir_inode_operations = { > .lookup = udf_lookup, > .create = udf_create, > + .setattr = udf_setattr, > .link = udf_link, > .unlink = udf_unlink, > .symlink = udf_symlink, > @@ -1401,3 +1402,9 @@ const struct inode_operations udf_dir_inode_operations = { > .mknod = udf_mknod, > .rename = udf_rename, > }; > +const struct inode_operations udf_symlink_inode_operations = { > + .readlink = generic_readlink, > + .follow_link = page_follow_link_light, > + .put_link = page_put_link, > + .setattr = udf_setattr, > +}; > diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h > index 8d46f42..0592020 100644 > --- a/fs/udf/udfdecl.h > +++ b/fs/udf/udfdecl.h > @@ -76,6 +76,7 @@ extern const struct inode_operations udf_dir_inode_operations; > extern const struct file_operations udf_dir_operations; > extern const struct inode_operations udf_file_inode_operations; > extern const struct file_operations udf_file_operations; > +extern const struct inode_operations udf_symlink_inode_operations; > extern const struct address_space_operations udf_aops; > extern const struct address_space_operations udf_adinicb_aops; > extern const struct address_space_operations udf_symlink_aops; > @@ -131,7 +132,7 @@ extern int udf_write_fi(struct inode *inode, struct fileIdentDesc *, > /* file.c */ > extern int udf_ioctl(struct inode *, struct file *, unsigned int, > unsigned long); > - > +extern int udf_setattr(struct dentry *dentry, struct iattr *iattr); > /* inode.c */ > extern struct inode *udf_iget(struct super_block *, struct kernel_lb_addr *); > extern int udf_sync_inode(struct inode *); > -- > 1.6.6.1 > -- Jan Kara <jack@xxxxxxx> SUSE Labs, CR -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html