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

Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2

* 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mfasheh/ocfs2:
ocfs2: Increment the reference count of an already-active stack.
[PATCH] configfs: Consolidate locking around configfs_detach_prep() in configfs_rmdir()
ocfs2: correctly set i_blocks after inline dir gets expanded
ocfs2: Jump to correct label in ocfs2_expand_inline_dir()
ocfs2: Fix sleep-with-spinlock recovery regression
[PATCH] ocfs2/cluster/netdebug.c: fix warning
[PATCH] ocfs2/cluster/tcp.c: make some functions static

+83 -77
+7 -10
fs/configfs/dir.c
··· 1311 1311 * Ensure that no racing symlink() will make detach_prep() fail while 1312 1312 * the new link is temporarily attached 1313 1313 */ 1314 - mutex_lock(&configfs_symlink_mutex); 1315 - spin_lock(&configfs_dirent_lock); 1316 1314 do { 1317 1315 struct mutex *wait_mutex; 1318 1316 1317 + mutex_lock(&configfs_symlink_mutex); 1318 + spin_lock(&configfs_dirent_lock); 1319 1319 ret = configfs_detach_prep(dentry, &wait_mutex); 1320 - if (ret) { 1320 + if (ret) 1321 1321 configfs_detach_rollback(dentry); 1322 - spin_unlock(&configfs_dirent_lock); 1323 - mutex_unlock(&configfs_symlink_mutex); 1322 + spin_unlock(&configfs_dirent_lock); 1323 + mutex_unlock(&configfs_symlink_mutex); 1324 + 1325 + if (ret) { 1324 1326 if (ret != -EAGAIN) { 1325 1327 config_item_put(parent_item); 1326 1328 return ret; ··· 1331 1329 /* Wait until the racing operation terminates */ 1332 1330 mutex_lock(wait_mutex); 1333 1331 mutex_unlock(wait_mutex); 1334 - 1335 - mutex_lock(&configfs_symlink_mutex); 1336 - spin_lock(&configfs_dirent_lock); 1337 1332 } 1338 1333 } while (ret == -EAGAIN); 1339 - spin_unlock(&configfs_dirent_lock); 1340 - mutex_unlock(&configfs_symlink_mutex); 1341 1334 1342 1335 /* Get a working ref for the duration of this function */ 1343 1336 item = configfs_get_config_item(dentry);
+13 -13
fs/ocfs2/cluster/netdebug.c
··· 138 138 " message id: %d\n" 139 139 " message type: %u\n" 140 140 " message key: 0x%08x\n" 141 - " sock acquiry: %lu.%lu\n" 142 - " send start: %lu.%lu\n" 143 - " wait start: %lu.%lu\n", 141 + " sock acquiry: %lu.%ld\n" 142 + " send start: %lu.%ld\n" 143 + " wait start: %lu.%ld\n", 144 144 nst, (unsigned long)nst->st_task->pid, 145 145 (unsigned long)nst->st_task->tgid, 146 146 nst->st_task->comm, nst->st_node, 147 147 nst->st_sc, nst->st_id, nst->st_msg_type, 148 148 nst->st_msg_key, 149 149 nst->st_sock_time.tv_sec, 150 - (unsigned long)nst->st_sock_time.tv_usec, 150 + (long)nst->st_sock_time.tv_usec, 151 151 nst->st_send_time.tv_sec, 152 - (unsigned long)nst->st_send_time.tv_usec, 152 + (long)nst->st_send_time.tv_usec, 153 153 nst->st_status_time.tv_sec, 154 - nst->st_status_time.tv_usec); 154 + (long)nst->st_status_time.tv_usec); 155 155 } 156 156 157 157 spin_unlock(&o2net_debug_lock); ··· 276 276 return sc; /* unused, just needs to be null when done */ 277 277 } 278 278 279 - #define TV_SEC_USEC(TV) TV.tv_sec, (unsigned long)TV.tv_usec 279 + #define TV_SEC_USEC(TV) TV.tv_sec, (long)TV.tv_usec 280 280 281 281 static int sc_seq_show(struct seq_file *seq, void *v) 282 282 { ··· 309 309 " remote node: %s\n" 310 310 " page off: %zu\n" 311 311 " handshake ok: %u\n" 312 - " timer: %lu.%lu\n" 313 - " data ready: %lu.%lu\n" 314 - " advance start: %lu.%lu\n" 315 - " advance stop: %lu.%lu\n" 316 - " func start: %lu.%lu\n" 317 - " func stop: %lu.%lu\n" 312 + " timer: %lu.%ld\n" 313 + " data ready: %lu.%ld\n" 314 + " advance start: %lu.%ld\n" 315 + " advance stop: %lu.%ld\n" 316 + " func start: %lu.%ld\n" 317 + " func stop: %lu.%ld\n" 318 318 " func key: %u\n" 319 319 " func type: %u\n", 320 320 sc,
+37 -7
fs/ocfs2/cluster/tcp.c
··· 143 143 static void o2net_sc_reset_idle_timer(struct o2net_sock_container *sc); 144 144 145 145 #ifdef CONFIG_DEBUG_FS 146 - void o2net_init_nst(struct o2net_send_tracking *nst, u32 msgtype, 147 - u32 msgkey, struct task_struct *task, u8 node) 146 + static void o2net_init_nst(struct o2net_send_tracking *nst, u32 msgtype, 147 + u32 msgkey, struct task_struct *task, u8 node) 148 148 { 149 149 INIT_LIST_HEAD(&nst->st_net_debug_item); 150 150 nst->st_task = task; ··· 153 153 nst->st_node = node; 154 154 } 155 155 156 - void o2net_set_nst_sock_time(struct o2net_send_tracking *nst) 156 + static void o2net_set_nst_sock_time(struct o2net_send_tracking *nst) 157 157 { 158 158 do_gettimeofday(&nst->st_sock_time); 159 159 } 160 160 161 - void o2net_set_nst_send_time(struct o2net_send_tracking *nst) 161 + static void o2net_set_nst_send_time(struct o2net_send_tracking *nst) 162 162 { 163 163 do_gettimeofday(&nst->st_send_time); 164 164 } 165 165 166 - void o2net_set_nst_status_time(struct o2net_send_tracking *nst) 166 + static void o2net_set_nst_status_time(struct o2net_send_tracking *nst) 167 167 { 168 168 do_gettimeofday(&nst->st_status_time); 169 169 } 170 170 171 - void o2net_set_nst_sock_container(struct o2net_send_tracking *nst, 171 + static void o2net_set_nst_sock_container(struct o2net_send_tracking *nst, 172 172 struct o2net_sock_container *sc) 173 173 { 174 174 nst->st_sc = sc; 175 175 } 176 176 177 - void o2net_set_nst_msg_id(struct o2net_send_tracking *nst, u32 msg_id) 177 + static void o2net_set_nst_msg_id(struct o2net_send_tracking *nst, u32 msg_id) 178 178 { 179 179 nst->st_id = msg_id; 180 180 } 181 + 182 + #else /* CONFIG_DEBUG_FS */ 183 + 184 + static inline void o2net_init_nst(struct o2net_send_tracking *nst, u32 msgtype, 185 + u32 msgkey, struct task_struct *task, u8 node) 186 + { 187 + } 188 + 189 + static inline void o2net_set_nst_sock_time(struct o2net_send_tracking *nst) 190 + { 191 + } 192 + 193 + static inline void o2net_set_nst_send_time(struct o2net_send_tracking *nst) 194 + { 195 + } 196 + 197 + static inline void o2net_set_nst_status_time(struct o2net_send_tracking *nst) 198 + { 199 + } 200 + 201 + static inline void o2net_set_nst_sock_container(struct o2net_send_tracking *nst, 202 + struct o2net_sock_container *sc) 203 + { 204 + } 205 + 206 + static inline void o2net_set_nst_msg_id(struct o2net_send_tracking *nst, 207 + u32 msg_id) 208 + { 209 + } 210 + 181 211 #endif /* CONFIG_DEBUG_FS */ 182 212 183 213 static inline int o2net_reconnect_delay(void)
-32
fs/ocfs2/cluster/tcp_internal.h
··· 224 224 struct timeval st_send_time; 225 225 struct timeval st_status_time; 226 226 }; 227 - 228 - void o2net_init_nst(struct o2net_send_tracking *nst, u32 msgtype, 229 - u32 msgkey, struct task_struct *task, u8 node); 230 - void o2net_set_nst_sock_time(struct o2net_send_tracking *nst); 231 - void o2net_set_nst_send_time(struct o2net_send_tracking *nst); 232 - void o2net_set_nst_status_time(struct o2net_send_tracking *nst); 233 - void o2net_set_nst_sock_container(struct o2net_send_tracking *nst, 234 - struct o2net_sock_container *sc); 235 - void o2net_set_nst_msg_id(struct o2net_send_tracking *nst, u32 msg_id); 236 - 237 227 #else 238 228 struct o2net_send_tracking { 239 229 u32 dummy; 240 230 }; 241 - 242 - static inline void o2net_init_nst(struct o2net_send_tracking *nst, u32 msgtype, 243 - u32 msgkey, struct task_struct *task, u8 node) 244 - { 245 - } 246 - static inline void o2net_set_nst_sock_time(struct o2net_send_tracking *nst) 247 - { 248 - } 249 - static inline void o2net_set_nst_send_time(struct o2net_send_tracking *nst) 250 - { 251 - } 252 - static inline void o2net_set_nst_status_time(struct o2net_send_tracking *nst) 253 - { 254 - } 255 - static inline void o2net_set_nst_sock_container(struct o2net_send_tracking *nst, 256 - struct o2net_sock_container *sc) 257 - { 258 - } 259 - static inline void o2net_set_nst_msg_id(struct o2net_send_tracking *nst, 260 - u32 msg_id) 261 - { 262 - } 263 231 #endif /* CONFIG_DEBUG_FS */ 264 232 265 233 #endif /* O2CLUSTER_TCP_INTERNAL_H */
+8 -3
fs/ocfs2/dir.c
··· 1300 1300 di->i_size = cpu_to_le64(sb->s_blocksize); 1301 1301 di->i_ctime = di->i_mtime = cpu_to_le64(dir->i_ctime.tv_sec); 1302 1302 di->i_ctime_nsec = di->i_mtime_nsec = cpu_to_le32(dir->i_ctime.tv_nsec); 1303 - dir->i_blocks = ocfs2_inode_sector_count(dir); 1304 1303 1305 1304 /* 1306 1305 * This should never fail as our extent list is empty and all ··· 1309 1310 NULL); 1310 1311 if (ret) { 1311 1312 mlog_errno(ret); 1312 - goto out; 1313 + goto out_commit; 1313 1314 } 1315 + 1316 + /* 1317 + * Set i_blocks after the extent insert for the most up to 1318 + * date ip_clusters value. 1319 + */ 1320 + dir->i_blocks = ocfs2_inode_sector_count(dir); 1314 1321 1315 1322 ret = ocfs2_journal_dirty(handle, di_bh); 1316 1323 if (ret) { ··· 1341 1336 len, 0, NULL); 1342 1337 if (ret) { 1343 1338 mlog_errno(ret); 1344 - goto out; 1339 + goto out_commit; 1345 1340 } 1346 1341 } 1347 1342
+14 -9
fs/ocfs2/journal.c
··· 1418 1418 { 1419 1419 unsigned int node_num; 1420 1420 int status, i; 1421 + u32 gen; 1421 1422 struct buffer_head *bh = NULL; 1422 1423 struct ocfs2_dinode *di; 1423 1424 1424 1425 /* This is called with the super block cluster lock, so we 1425 1426 * know that the slot map can't change underneath us. */ 1426 1427 1427 - spin_lock(&osb->osb_lock); 1428 1428 for (i = 0; i < osb->max_slots; i++) { 1429 1429 /* Read journal inode to get the recovery generation */ 1430 1430 status = ocfs2_read_journal_inode(osb, i, &bh, NULL); ··· 1433 1433 goto bail; 1434 1434 } 1435 1435 di = (struct ocfs2_dinode *)bh->b_data; 1436 - osb->slot_recovery_generations[i] = 1437 - ocfs2_get_recovery_generation(di); 1436 + gen = ocfs2_get_recovery_generation(di); 1438 1437 brelse(bh); 1439 1438 bh = NULL; 1439 + 1440 + spin_lock(&osb->osb_lock); 1441 + osb->slot_recovery_generations[i] = gen; 1440 1442 1441 1443 mlog(0, "Slot %u recovery generation is %u\n", i, 1442 1444 osb->slot_recovery_generations[i]); 1443 1445 1444 - if (i == osb->slot_num) 1446 + if (i == osb->slot_num) { 1447 + spin_unlock(&osb->osb_lock); 1445 1448 continue; 1449 + } 1446 1450 1447 1451 status = ocfs2_slot_to_node_num_locked(osb, i, &node_num); 1448 - if (status == -ENOENT) 1452 + if (status == -ENOENT) { 1453 + spin_unlock(&osb->osb_lock); 1449 1454 continue; 1455 + } 1450 1456 1451 - if (__ocfs2_recovery_map_test(osb, node_num)) 1457 + if (__ocfs2_recovery_map_test(osb, node_num)) { 1458 + spin_unlock(&osb->osb_lock); 1452 1459 continue; 1460 + } 1453 1461 spin_unlock(&osb->osb_lock); 1454 1462 1455 1463 /* Ok, we have a slot occupied by another node which ··· 1473 1465 mlog_errno(status); 1474 1466 goto bail; 1475 1467 } 1476 - 1477 - spin_lock(&osb->osb_lock); 1478 1468 } 1479 - spin_unlock(&osb->osb_lock); 1480 1469 1481 1470 status = 0; 1482 1471 bail:
+4 -3
fs/ocfs2/stackglue.c
··· 97 97 goto out; 98 98 } 99 99 100 - /* Ok, the stack is pinned */ 101 - p->sp_count++; 102 100 active_stack = p; 103 - 104 101 rc = 0; 105 102 106 103 out: 104 + /* If we found it, pin it */ 105 + if (!rc) 106 + active_stack->sp_count++; 107 + 107 108 spin_unlock(&ocfs2_stack_lock); 108 109 return rc; 109 110 }