diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-11-05 16:23:29 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-11-05 16:23:29 -0500 |
commit | e5a92362226e1685988bbf8d7ed50ab23453acc0 (patch) | |
tree | 8d061fd85d8ace4c76f28851bc9a73b846cd79ac /fs | |
parent | 4397989fc91ed289909ecf307c2dc21cee0e7905 (diff) | |
parent | 5219f346b0ea2a2a8821f1e966b190788c285b0b (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse:
fuse: invalidate target of rename
fuse: fix kunmap in fuse_ioctl_copy_user
fuse: prevent fuse_put_request on invalid pointer
Diffstat (limited to 'fs')
-rw-r--r-- | fs/fuse/dir.c | 4 | ||||
-rw-r--r-- | fs/fuse/file.c | 5 |
2 files changed, 6 insertions, 3 deletions
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c index 992f6c9410bb..8ada78aade58 100644 --- a/fs/fuse/dir.c +++ b/fs/fuse/dir.c | |||
@@ -712,8 +712,10 @@ static int fuse_rename(struct inode *olddir, struct dentry *oldent, | |||
712 | fuse_invalidate_attr(newdir); | 712 | fuse_invalidate_attr(newdir); |
713 | 713 | ||
714 | /* newent will end up negative */ | 714 | /* newent will end up negative */ |
715 | if (newent->d_inode) | 715 | if (newent->d_inode) { |
716 | fuse_invalidate_attr(newent->d_inode); | ||
716 | fuse_invalidate_entry_cache(newent); | 717 | fuse_invalidate_entry_cache(newent); |
718 | } | ||
717 | } else if (err == -EINTR) { | 719 | } else if (err == -EINTR) { |
718 | /* If request was interrupted, DEITY only knows if the | 720 | /* If request was interrupted, DEITY only knows if the |
719 | rename actually took place. If the invalidation | 721 | rename actually took place. If the invalidation |
diff --git a/fs/fuse/file.c b/fs/fuse/file.c index a3492f7d207c..c18913a777ae 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c | |||
@@ -1063,7 +1063,8 @@ ssize_t fuse_direct_io(struct file *file, const char __user *buf, | |||
1063 | break; | 1063 | break; |
1064 | } | 1064 | } |
1065 | } | 1065 | } |
1066 | fuse_put_request(fc, req); | 1066 | if (!IS_ERR(req)) |
1067 | fuse_put_request(fc, req); | ||
1067 | if (res > 0) | 1068 | if (res > 0) |
1068 | *ppos = pos; | 1069 | *ppos = pos; |
1069 | 1070 | ||
@@ -1599,7 +1600,7 @@ static int fuse_ioctl_copy_user(struct page **pages, struct iovec *iov, | |||
1599 | kaddr += copy; | 1600 | kaddr += copy; |
1600 | } | 1601 | } |
1601 | 1602 | ||
1602 | kunmap(map); | 1603 | kunmap(page); |
1603 | } | 1604 | } |
1604 | 1605 | ||
1605 | return 0; | 1606 | return 0; |