diff options
Diffstat (limited to 'fs/ncpfs/inode.c')
| -rw-r--r-- | fs/ncpfs/inode.c | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/fs/ncpfs/inode.c b/fs/ncpfs/inode.c index fa3385154023..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) { |
| @@ -728,8 +728,8 @@ out_fput: | |||
| 728 | out_bdi: | 728 | out_bdi: |
| 729 | /* 23/12/1998 Marcin Dalecki <dalecki@cs.net.pl>: | 729 | /* 23/12/1998 Marcin Dalecki <dalecki@cs.net.pl>: |
| 730 | * | 730 | * |
| 731 | * The previously used put_filp(ncp_filp); was bogous, since | 731 | * The previously used put_filp(ncp_filp); was bogus, since |
| 732 | * it doesn't proper unlocking. | 732 | * it doesn't perform proper unlocking. |
| 733 | */ | 733 | */ |
| 734 | fput(ncp_filp); | 734 | fput(ncp_filp); |
| 735 | out: | 735 | out: |
| @@ -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; |
