aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTahsin Erdogan <tahsin@google.com>2017-06-21 21:49:53 -0400
committerTheodore Ts'o <tytso@mit.edu>2017-06-21 21:49:53 -0400
commitbab79b04999ccbbf59f1693d0783cd6ae27e4278 (patch)
tree139a79802358a08a5bf3887bf91e1094b31a3cb9
parent0eefb10758e696616f19a84d8c5f15b9ffc0dccd (diff)
ext4: change ext4_xattr_inode_iget() signature
In general, kernel functions indicate success/failure through their return values. This function returns the status as an output parameter and reserves the return value for the inode. Make it follow the general convention. Signed-off-by: Tahsin Erdogan <tahsin@google.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
-rw-r--r--fs/ext4/xattr.c73
-rw-r--r--fs/ext4/xattr.h2
2 files changed, 40 insertions, 35 deletions
diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
index 53698f8a6e54..f16a90824d44 100644
--- a/fs/ext4/xattr.c
+++ b/fs/ext4/xattr.c
@@ -312,40 +312,47 @@ ext4_xattr_inode_read(struct inode *ea_inode, void *buf, size_t *size)
312 return 0; 312 return 0;
313} 313}
314 314
315struct inode *ext4_xattr_inode_iget(struct inode *parent, unsigned long ea_ino, int *err) 315static int ext4_xattr_inode_iget(struct inode *parent, unsigned long ea_ino,
316 struct inode **ea_inode)
316{ 317{
317 struct inode *ea_inode = NULL; 318 struct inode *inode;
319 int err;
320
321 inode = ext4_iget(parent->i_sb, ea_ino);
322 if (IS_ERR(inode)) {
323 err = PTR_ERR(inode);
324 ext4_error(parent->i_sb, "error while reading EA inode %lu "
325 "err=%d", ea_ino, err);
326 return err;
327 }
318 328
319 ea_inode = ext4_iget(parent->i_sb, ea_ino); 329 if (is_bad_inode(inode)) {
320 if (IS_ERR(ea_inode) || is_bad_inode(ea_inode)) {
321 int rc = IS_ERR(ea_inode) ? PTR_ERR(ea_inode) : 0;
322 ext4_error(parent->i_sb, "error while reading EA inode %lu " 330 ext4_error(parent->i_sb, "error while reading EA inode %lu "
323 "/ %d %d", ea_ino, rc, is_bad_inode(ea_inode)); 331 "is_bad_inode", ea_ino);
324 *err = rc != 0 ? rc : -EIO; 332 err = -EIO;
325 return NULL; 333 goto error;
326 } 334 }
327 335
328 if (EXT4_XATTR_INODE_GET_PARENT(ea_inode) != parent->i_ino || 336 if (EXT4_XATTR_INODE_GET_PARENT(inode) != parent->i_ino ||
329 ea_inode->i_generation != parent->i_generation) { 337 inode->i_generation != parent->i_generation) {
330 ext4_error(parent->i_sb, "Backpointer from EA inode %lu " 338 ext4_error(parent->i_sb, "Backpointer from EA inode %lu "
331 "to parent invalid.", ea_ino); 339 "to parent is invalid.", ea_ino);
332 *err = -EINVAL; 340 err = -EINVAL;
333 goto error; 341 goto error;
334 } 342 }
335 343
336 if (!(EXT4_I(ea_inode)->i_flags & EXT4_EA_INODE_FL)) { 344 if (!(EXT4_I(inode)->i_flags & EXT4_EA_INODE_FL)) {
337 ext4_error(parent->i_sb, "EA inode %lu does not have " 345 ext4_error(parent->i_sb, "EA inode %lu does not have "
338 "EXT4_EA_INODE_FL flag set.\n", ea_ino); 346 "EXT4_EA_INODE_FL flag set.\n", ea_ino);
339 *err = -EINVAL; 347 err = -EINVAL;
340 goto error; 348 goto error;
341 } 349 }
342 350
343 *err = 0; 351 *ea_inode = inode;
344 return ea_inode; 352 return 0;
345
346error: 353error:
347 iput(ea_inode); 354 iput(inode);
348 return NULL; 355 return err;
349} 356}
350 357
351/* 358/*
@@ -355,17 +362,17 @@ static int
355ext4_xattr_inode_get(struct inode *inode, unsigned long ea_ino, void *buffer, 362ext4_xattr_inode_get(struct inode *inode, unsigned long ea_ino, void *buffer,
356 size_t *size) 363 size_t *size)
357{ 364{
358 struct inode *ea_inode = NULL; 365 struct inode *ea_inode;
359 int err; 366 int ret;
360 367
361 ea_inode = ext4_xattr_inode_iget(inode, ea_ino, &err); 368 ret = ext4_xattr_inode_iget(inode, ea_ino, &ea_inode);
362 if (err) 369 if (ret)
363 return err; 370 return ret;
364 371
365 err = ext4_xattr_inode_read(ea_inode, buffer, size); 372 ret = ext4_xattr_inode_read(ea_inode, buffer, size);
366 iput(ea_inode); 373 iput(ea_inode);
367 374
368 return err; 375 return ret;
369} 376}
370 377
371static int 378static int
@@ -866,7 +873,7 @@ int ext4_xattr_inode_unlink(struct inode *inode, unsigned long ea_ino)
866 struct inode *ea_inode = NULL; 873 struct inode *ea_inode = NULL;
867 int err; 874 int err;
868 875
869 ea_inode = ext4_xattr_inode_iget(inode, ea_ino, &err); 876 err = ext4_xattr_inode_iget(inode, ea_ino, &ea_inode);
870 if (err) 877 if (err)
871 return err; 878 return err;
872 879
@@ -1946,7 +1953,7 @@ static int
1946ext4_xattr_inode_orphan_add(handle_t *handle, struct inode *inode, 1953ext4_xattr_inode_orphan_add(handle_t *handle, struct inode *inode,
1947 int credits, struct ext4_xattr_ino_array *lea_ino_array) 1954 int credits, struct ext4_xattr_ino_array *lea_ino_array)
1948{ 1955{
1949 struct inode *ea_inode = NULL; 1956 struct inode *ea_inode;
1950 int idx = 0, error = 0; 1957 int idx = 0, error = 0;
1951 1958
1952 if (lea_ino_array == NULL) 1959 if (lea_ino_array == NULL)
@@ -1965,8 +1972,8 @@ ext4_xattr_inode_orphan_add(handle_t *handle, struct inode *inode,
1965 return error; 1972 return error;
1966 } 1973 }
1967 } 1974 }
1968 ea_inode = ext4_xattr_inode_iget(inode, 1975 error = ext4_xattr_inode_iget(inode,
1969 lea_ino_array->xia_inodes[idx], &error); 1976 lea_ino_array->xia_inodes[idx], &ea_inode);
1970 if (error) 1977 if (error)
1971 continue; 1978 continue;
1972 inode_lock(ea_inode); 1979 inode_lock(ea_inode);
@@ -2083,7 +2090,7 @@ void
2083ext4_xattr_inode_array_free(struct inode *inode, 2090ext4_xattr_inode_array_free(struct inode *inode,
2084 struct ext4_xattr_ino_array *lea_ino_array) 2091 struct ext4_xattr_ino_array *lea_ino_array)
2085{ 2092{
2086 struct inode *ea_inode = NULL; 2093 struct inode *ea_inode;
2087 int idx = 0; 2094 int idx = 0;
2088 int err; 2095 int err;
2089 2096
@@ -2091,8 +2098,8 @@ ext4_xattr_inode_array_free(struct inode *inode,
2091 return; 2098 return;
2092 2099
2093 for (; idx < lea_ino_array->xia_count; ++idx) { 2100 for (; idx < lea_ino_array->xia_count; ++idx) {
2094 ea_inode = ext4_xattr_inode_iget(inode, 2101 err = ext4_xattr_inode_iget(inode,
2095 lea_ino_array->xia_inodes[idx], &err); 2102 lea_ino_array->xia_inodes[idx], &ea_inode);
2096 if (err) 2103 if (err)
2097 continue; 2104 continue;
2098 /* for inode's i_count get from ext4_xattr_delete_inode */ 2105 /* for inode's i_count get from ext4_xattr_delete_inode */
diff --git a/fs/ext4/xattr.h b/fs/ext4/xattr.h
index e8bef79bdc38..b6ef99d1a061 100644
--- a/fs/ext4/xattr.h
+++ b/fs/ext4/xattr.h
@@ -161,8 +161,6 @@ extern int ext4_xattr_get(struct inode *, int, const char *, void *, size_t);
161extern int ext4_xattr_set(struct inode *, int, const char *, const void *, size_t, int); 161extern int ext4_xattr_set(struct inode *, int, const char *, const void *, size_t, int);
162extern int ext4_xattr_set_handle(handle_t *, struct inode *, int, const char *, const void *, size_t, int); 162extern int ext4_xattr_set_handle(handle_t *, struct inode *, int, const char *, const void *, size_t, int);
163 163
164extern struct inode *ext4_xattr_inode_iget(struct inode *parent, unsigned long ea_ino,
165 int *err);
166extern int ext4_xattr_inode_unlink(struct inode *inode, unsigned long ea_ino); 164extern int ext4_xattr_inode_unlink(struct inode *inode, unsigned long ea_ino);
167extern int ext4_xattr_delete_inode(handle_t *handle, struct inode *inode, 165extern int ext4_xattr_delete_inode(handle_t *handle, struct inode *inode,
168 struct ext4_xattr_ino_array **array); 166 struct ext4_xattr_ino_array **array);