diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-31 18:57:56 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-31 18:57:56 -0500 |
commit | b58602a4bac012b5f4fc12fe6b46ab237b610d5d (patch) | |
tree | 38929e210a723f67fe2b945f37264bf3aae3c2c4 /fs/jfs/jfs_inode.c | |
parent | db200df0b3530f673d8e9f5bd535e9e10305842a (diff) | |
parent | 1f3403fa640f9f7b135dee79f2d39d01c8ad4a08 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (34 commits)
nfsd race fixes: jfs
nfsd race fixes: reiserfs
nfsd race fixes: ext4
nfsd race fixes: ext3
nfsd race fixes: ext2
nfsd/create race fixes, infrastructure
filesystem notification: create fs/notify to contain all fs notification
fs/block_dev.c: __read_mostly improvement and sb_is_blkdev_sb utilization
kill ->dir_notify()
filp_cachep can be static in fs/file_table.c
fix f_count description in Documentation/filesystems/files.txt
make INIT_FS use the __RW_LOCK_UNLOCKED initialization
take init_fs to saner place
kill vfs_permission
pass a struct path * to may_open
kill walk_init_root
remove incorrect comment in inode_permission
expand some comments (d_path / seq_path)
correct wrong function name of d_put in kernel document and source comment
fix switch_names() breakage in short-to-short case
...
Diffstat (limited to 'fs/jfs/jfs_inode.c')
-rw-r--r-- | fs/jfs/jfs_inode.c | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/fs/jfs/jfs_inode.c b/fs/jfs/jfs_inode.c index 70022fd1c539..d4d142c2edd4 100644 --- a/fs/jfs/jfs_inode.c +++ b/fs/jfs/jfs_inode.c | |||
@@ -79,7 +79,8 @@ struct inode *ialloc(struct inode *parent, umode_t mode) | |||
79 | inode = new_inode(sb); | 79 | inode = new_inode(sb); |
80 | if (!inode) { | 80 | if (!inode) { |
81 | jfs_warn("ialloc: new_inode returned NULL!"); | 81 | jfs_warn("ialloc: new_inode returned NULL!"); |
82 | return ERR_PTR(-ENOMEM); | 82 | rc = -ENOMEM; |
83 | goto fail; | ||
83 | } | 84 | } |
84 | 85 | ||
85 | jfs_inode = JFS_IP(inode); | 86 | jfs_inode = JFS_IP(inode); |
@@ -89,8 +90,12 @@ struct inode *ialloc(struct inode *parent, umode_t mode) | |||
89 | jfs_warn("ialloc: diAlloc returned %d!", rc); | 90 | jfs_warn("ialloc: diAlloc returned %d!", rc); |
90 | if (rc == -EIO) | 91 | if (rc == -EIO) |
91 | make_bad_inode(inode); | 92 | make_bad_inode(inode); |
92 | iput(inode); | 93 | goto fail_put; |
93 | return ERR_PTR(rc); | 94 | } |
95 | |||
96 | if (insert_inode_locked(inode) < 0) { | ||
97 | rc = -EINVAL; | ||
98 | goto fail_unlock; | ||
94 | } | 99 | } |
95 | 100 | ||
96 | inode->i_uid = current_fsuid(); | 101 | inode->i_uid = current_fsuid(); |
@@ -112,11 +117,8 @@ struct inode *ialloc(struct inode *parent, umode_t mode) | |||
112 | * Allocate inode to quota. | 117 | * Allocate inode to quota. |
113 | */ | 118 | */ |
114 | if (DQUOT_ALLOC_INODE(inode)) { | 119 | if (DQUOT_ALLOC_INODE(inode)) { |
115 | DQUOT_DROP(inode); | 120 | rc = -EDQUOT; |
116 | inode->i_flags |= S_NOQUOTA; | 121 | goto fail_drop; |
117 | inode->i_nlink = 0; | ||
118 | iput(inode); | ||
119 | return ERR_PTR(-EDQUOT); | ||
120 | } | 122 | } |
121 | 123 | ||
122 | inode->i_mode = mode; | 124 | inode->i_mode = mode; |
@@ -158,4 +160,15 @@ struct inode *ialloc(struct inode *parent, umode_t mode) | |||
158 | jfs_info("ialloc returns inode = 0x%p\n", inode); | 160 | jfs_info("ialloc returns inode = 0x%p\n", inode); |
159 | 161 | ||
160 | return inode; | 162 | return inode; |
163 | |||
164 | fail_drop: | ||
165 | DQUOT_DROP(inode); | ||
166 | inode->i_flags |= S_NOQUOTA; | ||
167 | fail_unlock: | ||
168 | inode->i_nlink = 0; | ||
169 | unlock_new_inode(inode); | ||
170 | fail_put: | ||
171 | iput(inode); | ||
172 | fail: | ||
173 | return ERR_PTR(rc); | ||
161 | } | 174 | } |