Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

jfs: Handle error from dquot_initialize()

dquot_initialize() can now return error. Handle it where possible

Slightly modified by Dave Kleikamp due to needed jfs_rename() error path
fix.

Signed-off-by: Jan Kara <jack@suse.com>
Reviewed-by: Dave Kleikamp <dave.kleikamp@oracle.com>

authored by

Dave Kleikamp and committed by
Jan Kara
acc84b05 2e6c97ea

+48 -17
+5 -2
fs/jfs/file.c
··· 107 107 if (rc) 108 108 return rc; 109 109 110 - if (is_quota_modification(inode, iattr)) 111 - dquot_initialize(inode); 110 + if (is_quota_modification(inode, iattr)) { 111 + rc = dquot_initialize(inode); 112 + if (rc) 113 + return rc; 114 + } 112 115 if ((iattr->ia_valid & ATTR_UID && !uid_eq(iattr->ia_uid, inode->i_uid)) || 113 116 (iattr->ia_valid & ATTR_GID && !gid_eq(iattr->ia_gid, inode->i_gid))) { 114 117 rc = dquot_transfer(inode, iattr);
+3 -1
fs/jfs/jfs_inode.c
··· 109 109 /* 110 110 * Allocate inode to quota. 111 111 */ 112 - dquot_initialize(inode); 112 + rc = dquot_initialize(inode); 113 + if (rc) 114 + goto fail_drop; 113 115 rc = dquot_alloc_inode(inode); 114 116 if (rc) 115 117 goto fail_drop;
+40 -14
fs/jfs/namei.c
··· 86 86 87 87 jfs_info("jfs_create: dip:0x%p name:%pd", dip, dentry); 88 88 89 - dquot_initialize(dip); 89 + rc = dquot_initialize(dip); 90 + if (rc) 91 + goto out1; 90 92 91 93 /* 92 94 * search parent directory for entry/freespace ··· 220 218 221 219 jfs_info("jfs_mkdir: dip:0x%p name:%pd", dip, dentry); 222 220 223 - dquot_initialize(dip); 221 + rc = dquot_initialize(dip); 222 + if (rc) 223 + goto out1; 224 224 225 225 /* 226 226 * search parent directory for entry/freespace ··· 359 355 jfs_info("jfs_rmdir: dip:0x%p name:%pd", dip, dentry); 360 356 361 357 /* Init inode for quota operations. */ 362 - dquot_initialize(dip); 363 - dquot_initialize(ip); 358 + rc = dquot_initialize(dip); 359 + if (rc) 360 + goto out; 361 + rc = dquot_initialize(ip); 362 + if (rc) 363 + goto out; 364 364 365 365 /* directory must be empty to be removed */ 366 366 if (!dtEmpty(ip)) { ··· 491 483 jfs_info("jfs_unlink: dip:0x%p name:%pd", dip, dentry); 492 484 493 485 /* Init inode for quota operations. */ 494 - dquot_initialize(dip); 495 - dquot_initialize(ip); 486 + rc = dquot_initialize(dip); 487 + if (rc) 488 + goto out; 489 + rc = dquot_initialize(ip); 490 + if (rc) 491 + goto out; 496 492 497 493 if ((rc = get_UCSname(&dname, dentry))) 498 494 goto out; ··· 811 799 812 800 jfs_info("jfs_link: %pd %pd", old_dentry, dentry); 813 801 814 - dquot_initialize(dir); 802 + rc = dquot_initialize(dir); 803 + if (rc) 804 + goto out; 815 805 816 806 tid = txBegin(ip->i_sb, 0); 817 807 ··· 824 810 * scan parent directory for entry/freespace 825 811 */ 826 812 if ((rc = get_UCSname(&dname, dentry))) 827 - goto out; 813 + goto out_tx; 828 814 829 815 if ((rc = dtSearch(dir, &dname, &ino, &btstack, JFS_CREATE))) 830 816 goto free_dname; ··· 856 842 free_dname: 857 843 free_UCSname(&dname); 858 844 859 - out: 845 + out_tx: 860 846 txEnd(tid); 861 847 862 848 mutex_unlock(&JFS_IP(ip)->commit_mutex); 863 849 mutex_unlock(&JFS_IP(dir)->commit_mutex); 864 850 851 + out: 865 852 jfs_info("jfs_link: rc:%d", rc); 866 853 return rc; 867 854 } ··· 906 891 907 892 jfs_info("jfs_symlink: dip:0x%p name:%s", dip, name); 908 893 909 - dquot_initialize(dip); 894 + rc = dquot_initialize(dip); 895 + if (rc) 896 + goto out1; 910 897 911 898 ssize = strlen(name) + 1; 912 899 ··· 1099 1082 1100 1083 jfs_info("jfs_rename: %pd %pd", old_dentry, new_dentry); 1101 1084 1102 - dquot_initialize(old_dir); 1103 - dquot_initialize(new_dir); 1085 + rc = dquot_initialize(old_dir); 1086 + if (rc) 1087 + goto out1; 1088 + rc = dquot_initialize(new_dir); 1089 + if (rc) 1090 + goto out1; 1104 1091 1105 1092 old_ip = d_inode(old_dentry); 1106 1093 new_ip = d_inode(new_dentry); ··· 1151 1130 } else if (new_ip) { 1152 1131 IWRITE_LOCK(new_ip, RDWRLOCK_NORMAL); 1153 1132 /* Init inode for quota operations. */ 1154 - dquot_initialize(new_ip); 1133 + rc = dquot_initialize(new_ip); 1134 + if (rc) 1135 + goto out_unlock; 1155 1136 } 1156 1137 1157 1138 /* ··· 1341 1318 1342 1319 clear_cflag(COMMIT_Stale, old_dir); 1343 1320 } 1321 + out_unlock: 1344 1322 if (new_ip && !S_ISDIR(new_ip->i_mode)) 1345 1323 IWRITE_UNLOCK(new_ip); 1346 1324 out3: ··· 1377 1353 1378 1354 jfs_info("jfs_mknod: %pd", dentry); 1379 1355 1380 - dquot_initialize(dir); 1356 + rc = dquot_initialize(dir); 1357 + if (rc) 1358 + goto out; 1381 1359 1382 1360 if ((rc = get_UCSname(&dname, dentry))) 1383 1361 goto out;