diff options
author | Jiri Kosina <jkosina@suse.cz> | 2010-08-11 03:36:51 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2010-08-11 03:36:51 -0400 |
commit | 6396fc3b3ff3f6b942992b653a62df11dcef9bea (patch) | |
tree | db3c7cbe833b43c653adc99f70941431c5ff7c4e /fs/ncpfs/inode.c | |
parent | 4785879e4d340e24e54f6de2ccfc42728b912808 (diff) | |
parent | 3d30701b58970425e1d45994d6cb82f828924fdd (diff) |
Merge branch 'master' into for-next
Conflicts:
fs/exofs/inode.c
Diffstat (limited to 'fs/ncpfs/inode.c')
-rw-r--r-- | fs/ncpfs/inode.c | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/fs/ncpfs/inode.c b/fs/ncpfs/inode.c index 1e634deff941..b4de38cf49f5 100644 --- a/fs/ncpfs/inode.c +++ b/fs/ncpfs/inode.c | |||
@@ -43,7 +43,7 @@ | |||
43 | #define NCP_DEFAULT_TIME_OUT 10 | 43 | #define NCP_DEFAULT_TIME_OUT 10 |
44 | #define NCP_DEFAULT_RETRY_COUNT 20 | 44 | #define NCP_DEFAULT_RETRY_COUNT 20 |
45 | 45 | ||
46 | static void ncp_delete_inode(struct inode *); | 46 | static void ncp_evict_inode(struct inode *); |
47 | static void ncp_put_super(struct super_block *); | 47 | static void ncp_put_super(struct super_block *); |
48 | static int ncp_statfs(struct dentry *, struct kstatfs *); | 48 | static int ncp_statfs(struct dentry *, struct kstatfs *); |
49 | static int ncp_show_options(struct seq_file *, struct vfsmount *); | 49 | static int ncp_show_options(struct seq_file *, struct vfsmount *); |
@@ -100,7 +100,7 @@ static const struct super_operations ncp_sops = | |||
100 | .alloc_inode = ncp_alloc_inode, | 100 | .alloc_inode = ncp_alloc_inode, |
101 | .destroy_inode = ncp_destroy_inode, | 101 | .destroy_inode = ncp_destroy_inode, |
102 | .drop_inode = generic_delete_inode, | 102 | .drop_inode = generic_delete_inode, |
103 | .delete_inode = ncp_delete_inode, | 103 | .evict_inode = ncp_evict_inode, |
104 | .put_super = ncp_put_super, | 104 | .put_super = ncp_put_super, |
105 | .statfs = ncp_statfs, | 105 | .statfs = ncp_statfs, |
106 | .remount_fs = ncp_remount, | 106 | .remount_fs = ncp_remount, |
@@ -282,19 +282,19 @@ ncp_iget(struct super_block *sb, struct ncp_entry_info *info) | |||
282 | } | 282 | } |
283 | 283 | ||
284 | static void | 284 | static void |
285 | ncp_delete_inode(struct inode *inode) | 285 | ncp_evict_inode(struct inode *inode) |
286 | { | 286 | { |
287 | truncate_inode_pages(&inode->i_data, 0); | 287 | truncate_inode_pages(&inode->i_data, 0); |
288 | end_writeback(inode); | ||
288 | 289 | ||
289 | if (S_ISDIR(inode->i_mode)) { | 290 | if (S_ISDIR(inode->i_mode)) { |
290 | DDPRINTK("ncp_delete_inode: put directory %ld\n", inode->i_ino); | 291 | DDPRINTK("ncp_evict_inode: put directory %ld\n", inode->i_ino); |
291 | } | 292 | } |
292 | 293 | ||
293 | if (ncp_make_closed(inode) != 0) { | 294 | if (ncp_make_closed(inode) != 0) { |
294 | /* We can't do anything but complain. */ | 295 | /* We can't do anything but complain. */ |
295 | printk(KERN_ERR "ncp_delete_inode: could not close\n"); | 296 | printk(KERN_ERR "ncp_evict_inode: could not close\n"); |
296 | } | 297 | } |
297 | clear_inode(inode); | ||
298 | } | 298 | } |
299 | 299 | ||
300 | static void ncp_stop_tasks(struct ncp_server *server) { | 300 | static void ncp_stop_tasks(struct ncp_server *server) { |
@@ -924,9 +924,8 @@ int ncp_notify_change(struct dentry *dentry, struct iattr *attr) | |||
924 | tmpattr.ia_valid = ATTR_MODE; | 924 | tmpattr.ia_valid = ATTR_MODE; |
925 | tmpattr.ia_mode = attr->ia_mode; | 925 | tmpattr.ia_mode = attr->ia_mode; |
926 | 926 | ||
927 | result = inode_setattr(inode, &tmpattr); | 927 | setattr_copy(inode, &tmpattr); |
928 | if (result) | 928 | mark_inode_dirty(inode); |
929 | goto out; | ||
930 | } | 929 | } |
931 | } | 930 | } |
932 | #endif | 931 | #endif |
@@ -954,15 +953,12 @@ int ncp_notify_change(struct dentry *dentry, struct iattr *attr) | |||
954 | result = ncp_make_closed(inode); | 953 | result = ncp_make_closed(inode); |
955 | if (result) | 954 | if (result) |
956 | goto out; | 955 | goto out; |
957 | { | 956 | |
958 | struct iattr tmpattr; | 957 | if (attr->ia_size != i_size_read(inode)) { |
959 | 958 | result = vmtruncate(inode, attr->ia_size); | |
960 | tmpattr.ia_valid = ATTR_SIZE; | ||
961 | tmpattr.ia_size = attr->ia_size; | ||
962 | |||
963 | result = inode_setattr(inode, &tmpattr); | ||
964 | if (result) | 959 | if (result) |
965 | goto out; | 960 | goto out; |
961 | mark_inode_dirty(inode); | ||
966 | } | 962 | } |
967 | } | 963 | } |
968 | if ((attr->ia_valid & ATTR_CTIME) != 0) { | 964 | if ((attr->ia_valid & ATTR_CTIME) != 0) { |
@@ -1002,8 +998,12 @@ int ncp_notify_change(struct dentry *dentry, struct iattr *attr) | |||
1002 | NCP_FINFO(inode)->nwattr = info.attributes; | 998 | NCP_FINFO(inode)->nwattr = info.attributes; |
1003 | #endif | 999 | #endif |
1004 | } | 1000 | } |
1005 | if (!result) | 1001 | if (result) |
1006 | result = inode_setattr(inode, attr); | 1002 | goto out; |
1003 | |||
1004 | setattr_copy(inode, attr); | ||
1005 | mark_inode_dirty(inode); | ||
1006 | |||
1007 | out: | 1007 | out: |
1008 | unlock_kernel(); | 1008 | unlock_kernel(); |
1009 | return result; | 1009 | return result; |