mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	kill-the-bkl/reiserfs: drop the fs race watchdog from _get_block_create_0()
We had a watchdog in _get_block_create_0() that jumped to a fixup retry path in case the bkl got relaxed while calling kmap(). This is not necessary anymore since we now have a reiserfs lock that is not implicitly relaxed while sleeping. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jeff Mahoney <jeffm@suse.com> Cc: Chris Mason <chris.mason@oracle.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Alexander Beregalov <a.beregalov@gmail.com> Cc: Laurent Riffard <laurent.riffard@free.fr> Cc: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
		
							parent
							
								
									205cb37b89
								
							
						
					
					
						commit
						27b3a5c51b
					
				
					 1 changed files with 2 additions and 9 deletions
				
			
		| 
						 | 
					@ -251,7 +251,6 @@ static int _get_block_create_0(struct inode *inode, sector_t block,
 | 
				
			||||||
	struct cpu_key key;
 | 
						struct cpu_key key;
 | 
				
			||||||
	struct buffer_head *bh;
 | 
						struct buffer_head *bh;
 | 
				
			||||||
	struct item_head *ih, tmp_ih;
 | 
						struct item_head *ih, tmp_ih;
 | 
				
			||||||
	int fs_gen;
 | 
					 | 
				
			||||||
	b_blocknr_t blocknr;
 | 
						b_blocknr_t blocknr;
 | 
				
			||||||
	char *p = NULL;
 | 
						char *p = NULL;
 | 
				
			||||||
	int chars;
 | 
						int chars;
 | 
				
			||||||
| 
						 | 
					@ -265,7 +264,6 @@ static int _get_block_create_0(struct inode *inode, sector_t block,
 | 
				
			||||||
		     (loff_t) block * inode->i_sb->s_blocksize + 1, TYPE_ANY,
 | 
							     (loff_t) block * inode->i_sb->s_blocksize + 1, TYPE_ANY,
 | 
				
			||||||
		     3);
 | 
							     3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      research:
 | 
					 | 
				
			||||||
	result = search_for_position_by_key(inode->i_sb, &key, &path);
 | 
						result = search_for_position_by_key(inode->i_sb, &key, &path);
 | 
				
			||||||
	if (result != POSITION_FOUND) {
 | 
						if (result != POSITION_FOUND) {
 | 
				
			||||||
		pathrelse(&path);
 | 
							pathrelse(&path);
 | 
				
			||||||
| 
						 | 
					@ -340,7 +338,6 @@ static int _get_block_create_0(struct inode *inode, sector_t block,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// read file tail into part of page
 | 
						// read file tail into part of page
 | 
				
			||||||
	offset = (cpu_key_k_offset(&key) - 1) & (PAGE_CACHE_SIZE - 1);
 | 
						offset = (cpu_key_k_offset(&key) - 1) & (PAGE_CACHE_SIZE - 1);
 | 
				
			||||||
	fs_gen = get_generation(inode->i_sb);
 | 
					 | 
				
			||||||
	copy_item_head(&tmp_ih, ih);
 | 
						copy_item_head(&tmp_ih, ih);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* we only want to kmap if we are reading the tail into the page.
 | 
						/* we only want to kmap if we are reading the tail into the page.
 | 
				
			||||||
| 
						 | 
					@ -348,13 +345,9 @@ static int _get_block_create_0(struct inode *inode, sector_t block,
 | 
				
			||||||
	 ** sure we need to.  But, this means the item might move if
 | 
						 ** sure we need to.  But, this means the item might move if
 | 
				
			||||||
	 ** kmap schedules
 | 
						 ** kmap schedules
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	if (!p) {
 | 
						if (!p)
 | 
				
			||||||
		p = (char *)kmap(bh_result->b_page);
 | 
							p = (char *)kmap(bh_result->b_page);
 | 
				
			||||||
		if (fs_changed(fs_gen, inode->i_sb)
 | 
					
 | 
				
			||||||
		    && item_moved(&tmp_ih, &path)) {
 | 
					 | 
				
			||||||
			goto research;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	p += offset;
 | 
						p += offset;
 | 
				
			||||||
	memset(p, 0, inode->i_sb->s_blocksize);
 | 
						memset(p, 0, inode->i_sb->s_blocksize);
 | 
				
			||||||
	do {
 | 
						do {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue