diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-03-03 11:08:21 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-03-03 11:08:21 -0500 |
commit | 60f8a8d4c6c46bb080e8e65d30be31b172a39a78 (patch) | |
tree | d8fcf72ba13cb4a78b4457e869b7260c1ac7fe46 | |
parent | b037bba71bca77c7247e7c2079f227ad7b961c34 (diff) | |
parent | b2d82ee3c8b2193ee5bc7eca4687ee9be30abd34 (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: fix large stack use
fuse: cleanup in fuse_notify_inval_...()
-rw-r--r-- | fs/fuse/dev.c | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c index 51d9e33d634f..eb7e9423691f 100644 --- a/fs/fuse/dev.c +++ b/fs/fuse/dev.c | |||
@@ -865,13 +865,10 @@ static int fuse_notify_inval_inode(struct fuse_conn *fc, unsigned int size, | |||
865 | 865 | ||
866 | down_read(&fc->killsb); | 866 | down_read(&fc->killsb); |
867 | err = -ENOENT; | 867 | err = -ENOENT; |
868 | if (!fc->sb) | 868 | if (fc->sb) { |
869 | goto err_unlock; | 869 | err = fuse_reverse_inval_inode(fc->sb, outarg.ino, |
870 | 870 | outarg.off, outarg.len); | |
871 | err = fuse_reverse_inval_inode(fc->sb, outarg.ino, | 871 | } |
872 | outarg.off, outarg.len); | ||
873 | |||
874 | err_unlock: | ||
875 | up_read(&fc->killsb); | 872 | up_read(&fc->killsb); |
876 | return err; | 873 | return err; |
877 | 874 | ||
@@ -884,10 +881,15 @@ static int fuse_notify_inval_entry(struct fuse_conn *fc, unsigned int size, | |||
884 | struct fuse_copy_state *cs) | 881 | struct fuse_copy_state *cs) |
885 | { | 882 | { |
886 | struct fuse_notify_inval_entry_out outarg; | 883 | struct fuse_notify_inval_entry_out outarg; |
887 | int err = -EINVAL; | 884 | int err = -ENOMEM; |
888 | char buf[FUSE_NAME_MAX+1]; | 885 | char *buf; |
889 | struct qstr name; | 886 | struct qstr name; |
890 | 887 | ||
888 | buf = kzalloc(FUSE_NAME_MAX + 1, GFP_KERNEL); | ||
889 | if (!buf) | ||
890 | goto err; | ||
891 | |||
892 | err = -EINVAL; | ||
891 | if (size < sizeof(outarg)) | 893 | if (size < sizeof(outarg)) |
892 | goto err; | 894 | goto err; |
893 | 895 | ||
@@ -910,16 +912,14 @@ static int fuse_notify_inval_entry(struct fuse_conn *fc, unsigned int size, | |||
910 | 912 | ||
911 | down_read(&fc->killsb); | 913 | down_read(&fc->killsb); |
912 | err = -ENOENT; | 914 | err = -ENOENT; |
913 | if (!fc->sb) | 915 | if (fc->sb) |
914 | goto err_unlock; | 916 | err = fuse_reverse_inval_entry(fc->sb, outarg.parent, &name); |
915 | |||
916 | err = fuse_reverse_inval_entry(fc->sb, outarg.parent, &name); | ||
917 | |||
918 | err_unlock: | ||
919 | up_read(&fc->killsb); | 917 | up_read(&fc->killsb); |
918 | kfree(buf); | ||
920 | return err; | 919 | return err; |
921 | 920 | ||
922 | err: | 921 | err: |
922 | kfree(buf); | ||
923 | fuse_copy_finish(cs); | 923 | fuse_copy_finish(cs); |
924 | return err; | 924 | return err; |
925 | } | 925 | } |