diff options
Diffstat (limited to 'fs/nilfs2/inode.c')
| -rw-r--r-- | fs/nilfs2/inode.c | 109 | 
1 files changed, 63 insertions, 46 deletions
| diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c index 534631358b13..a0ebdb17e912 100644 --- a/fs/nilfs2/inode.c +++ b/fs/nilfs2/inode.c @@ -13,11 +13,7 @@   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * GNU General Public License for more details.   * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA - * - * Written by Ryusuke Konishi <ryusuke@osrg.net> + * Written by Ryusuke Konishi.   *   */ @@ -87,7 +83,7 @@ int nilfs_get_block(struct inode *inode, sector_t blkoff,  	struct the_nilfs *nilfs = inode->i_sb->s_fs_info;  	__u64 blknum = 0;  	int err = 0, ret; -	unsigned maxblocks = bh_result->b_size >> inode->i_blkbits; +	unsigned int maxblocks = bh_result->b_size >> inode->i_blkbits;  	down_read(&NILFS_MDT(nilfs->ns_dat)->mi_sem);  	ret = nilfs_bmap_lookup_contig(ii->i_bmap, blkoff, &blknum, maxblocks); @@ -133,11 +129,14 @@ int nilfs_get_block(struct inode *inode, sector_t blkoff,  		/* Error handling should be detailed */  		set_buffer_new(bh_result);  		set_buffer_delay(bh_result); -		map_bh(bh_result, inode->i_sb, 0); /* dbn must be changed -						      to proper value */ +		map_bh(bh_result, inode->i_sb, 0); +		/* Disk block number must be changed to proper value */ +  	} else if (ret == -ENOENT) { -		/* not found is not error (e.g. hole); must return without -		   the mapped state flag. */ +		/* +		 * not found is not error (e.g. hole); must return without +		 * the mapped state flag. +		 */  		;  	} else {  		err = ret; @@ -167,7 +166,7 @@ static int nilfs_readpage(struct file *file, struct page *page)   * @nr_pages - number of pages to be read   */  static int nilfs_readpages(struct file *file, struct address_space *mapping, -			   struct list_head *pages, unsigned nr_pages) +			   struct list_head *pages, unsigned int nr_pages)  {  	return mpage_readpages(mapping, pages, nr_pages, nilfs_get_block);  } @@ -226,7 +225,7 @@ static int nilfs_set_page_dirty(struct page *page)  	int ret = __set_page_dirty_nobuffers(page);  	if (page_has_buffers(page)) { -		unsigned nr_dirty = 0; +		unsigned int nr_dirty = 0;  		struct buffer_head *bh, *head;  		/* @@ -249,7 +248,7 @@ static int nilfs_set_page_dirty(struct page *page)  		if (nr_dirty)  			nilfs_set_file_dirty(inode, nr_dirty);  	} else if (ret) { -		unsigned nr_dirty = 1 << (PAGE_SHIFT - inode->i_blkbits); +		unsigned int nr_dirty = 1 << (PAGE_SHIFT - inode->i_blkbits);  		nilfs_set_file_dirty(inode, nr_dirty);  	} @@ -291,8 +290,8 @@ static int nilfs_write_end(struct file *file, struct address_space *mapping,  			   struct page *page, void *fsdata)  {  	struct inode *inode = mapping->host; -	unsigned start = pos & (PAGE_SIZE - 1); -	unsigned nr_dirty; +	unsigned int start = pos & (PAGE_SIZE - 1); +	unsigned int nr_dirty;  	int err;  	nr_dirty = nilfs_page_count_clean_buffers(page, start, @@ -305,7 +304,7 @@ static int nilfs_write_end(struct file *file, struct address_space *mapping,  }  static ssize_t -nilfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter, loff_t offset) +nilfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter)  {  	struct inode *inode = file_inode(iocb->ki_filp); @@ -313,7 +312,7 @@ nilfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter, loff_t offset)  		return 0;  	/* Needs synchronization with the cleaner */ -	return blockdev_direct_IO(iocb, inode, iter, offset, nilfs_get_block); +	return blockdev_direct_IO(iocb, inode, iter, nilfs_get_block);  }  const struct address_space_operations nilfs_aops = { @@ -399,23 +398,26 @@ struct inode *nilfs_new_inode(struct inode *dir, umode_t mode)  	err = nilfs_init_acl(inode, dir);  	if (unlikely(err)) -		goto failed_after_creation; /* never occur. When supporting -				    nilfs_init_acl(), proper cancellation of -				    above jobs should be considered */ +		/* +		 * Never occur.  When supporting nilfs_init_acl(), +		 * proper cancellation of above jobs should be considered. +		 */ +		goto failed_after_creation;  	return inode;   failed_after_creation:  	clear_nlink(inode);  	unlock_new_inode(inode); -	iput(inode);  /* raw_inode will be deleted through -			 nilfs_evict_inode() */ +	iput(inode);  /* +		       * raw_inode will be deleted through +		       * nilfs_evict_inode(). +		       */  	goto failed;   failed_ifile_create_inode:  	make_bad_inode(inode); -	iput(inode);  /* if i_nlink == 1, generic_forget_inode() will be -			 called */ +	iput(inode);   failed:  	return ERR_PTR(err);  } @@ -666,8 +668,10 @@ void nilfs_write_inode_common(struct inode *inode,  	else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))  		raw_inode->i_device_code =  			cpu_to_le64(huge_encode_dev(inode->i_rdev)); -	/* When extending inode, nilfs->ns_inode_size should be checked -	   for substitutions of appended fields */ +	/* +	 * When extending inode, nilfs->ns_inode_size should be checked +	 * for substitutions of appended fields. +	 */  }  void nilfs_update_inode(struct inode *inode, struct buffer_head *ibh, int flags) @@ -685,9 +689,12 @@ void nilfs_update_inode(struct inode *inode, struct buffer_head *ibh, int flags)  		set_bit(NILFS_I_INODE_SYNC, &ii->i_state);  	nilfs_write_inode_common(inode, raw_inode, 0); -		/* XXX: call with has_bmap = 0 is a workaround to avoid -		   deadlock of bmap. This delays update of i_bmap to just -		   before writing */ +		/* +		 * XXX: call with has_bmap = 0 is a workaround to avoid +		 * deadlock of bmap.  This delays update of i_bmap to just +		 * before writing. +		 */ +  	nilfs_ifile_unmap_inode(ifile, ino, ibh);  } @@ -752,14 +759,15 @@ void nilfs_truncate(struct inode *inode)  	nilfs_mark_inode_dirty(inode);  	nilfs_set_file_dirty(inode, 0);  	nilfs_transaction_commit(sb); -	/* May construct a logical segment and may fail in sync mode. -	   But truncate has no return value. */ +	/* +	 * May construct a logical segment and may fail in sync mode. +	 * But truncate has no return value. +	 */  }  static void nilfs_clear_inode(struct inode *inode)  {  	struct nilfs_inode_info *ii = NILFS_I(inode); -	struct nilfs_mdt_info *mdi = NILFS_MDT(inode);  	/*  	 * Free resources allocated in nilfs_read_inode(), here. @@ -768,8 +776,8 @@ static void nilfs_clear_inode(struct inode *inode)  	brelse(ii->i_bh);  	ii->i_bh = NULL; -	if (mdi && mdi->mi_palloc_cache) -		nilfs_palloc_destroy_cache(inode); +	if (nilfs_is_metadata_file_inode(inode)) +		nilfs_mdt_clear(inode);  	if (test_bit(NILFS_I_BMAP, &ii->i_state))  		nilfs_bmap_clear(ii->i_bmap); @@ -811,8 +819,10 @@ void nilfs_evict_inode(struct inode *inode)  	if (IS_SYNC(inode))  		nilfs_set_transaction_flag(NILFS_TI_SYNC);  	nilfs_transaction_commit(sb); -	/* May construct a logical segment and may fail in sync mode. -	   But delete_inode has no return value. */ +	/* +	 * May construct a logical segment and may fail in sync mode. +	 * But delete_inode has no return value. +	 */  }  int nilfs_setattr(struct dentry *dentry, struct iattr *iattr) @@ -856,6 +866,7 @@ out_err:  int nilfs_permission(struct inode *inode, int mask)  {  	struct nilfs_root *root = NILFS_I(inode)->i_root; +  	if ((mask & MAY_WRITE) && root &&  	    root->cno != NILFS_CPTREE_CURRENT_CNO)  		return -EROFS; /* snapshot is not writable */ @@ -906,7 +917,7 @@ int nilfs_inode_dirty(struct inode *inode)  	return ret;  } -int nilfs_set_file_dirty(struct inode *inode, unsigned nr_dirty) +int nilfs_set_file_dirty(struct inode *inode, unsigned int nr_dirty)  {  	struct nilfs_inode_info *ii = NILFS_I(inode);  	struct the_nilfs *nilfs = inode->i_sb->s_fs_info; @@ -919,17 +930,23 @@ int nilfs_set_file_dirty(struct inode *inode, unsigned nr_dirty)  	spin_lock(&nilfs->ns_inode_lock);  	if (!test_bit(NILFS_I_QUEUED, &ii->i_state) &&  	    !test_bit(NILFS_I_BUSY, &ii->i_state)) { -		/* Because this routine may race with nilfs_dispose_list(), -		   we have to check NILFS_I_QUEUED here, too. */ +		/* +		 * Because this routine may race with nilfs_dispose_list(), +		 * we have to check NILFS_I_QUEUED here, too. +		 */  		if (list_empty(&ii->i_dirty) && igrab(inode) == NULL) { -			/* This will happen when somebody is freeing -			   this inode. */ +			/* +			 * This will happen when somebody is freeing +			 * this inode. +			 */  			nilfs_warning(inode->i_sb, __func__, -				      "cannot get inode (ino=%lu)\n", +				      "cannot get inode (ino=%lu)",  				      inode->i_ino);  			spin_unlock(&nilfs->ns_inode_lock); -			return -EINVAL; /* NILFS_I_DIRTY may remain for -					   freeing inode */ +			return -EINVAL; /* +					 * NILFS_I_DIRTY may remain for +					 * freeing inode. +					 */  		}  		list_move_tail(&ii->i_dirty, &nilfs->ns_dirty_files);  		set_bit(NILFS_I_QUEUED, &ii->i_state); @@ -946,7 +963,7 @@ int __nilfs_mark_inode_dirty(struct inode *inode, int flags)  	err = nilfs_load_inode_block(inode, &ibh);  	if (unlikely(err)) {  		nilfs_warning(inode->i_sb, __func__, -			      "failed to reget inode block.\n"); +			      "failed to reget inode block.");  		return err;  	}  	nilfs_update_inode(inode, ibh, flags); @@ -973,7 +990,7 @@ void nilfs_dirty_inode(struct inode *inode, int flags)  	if (is_bad_inode(inode)) {  		nilfs_warning(inode->i_sb, __func__, -			      "tried to mark bad_inode dirty. ignored.\n"); +			      "tried to mark bad_inode dirty. ignored.");  		dump_stack();  		return;  	} | 
