diff options
Diffstat (limited to 'fs/gfs2/file.c')
| -rw-r--r-- | fs/gfs2/file.c | 34 | 
1 files changed, 15 insertions, 19 deletions
diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c index 382000ffac1..991ab2d484d 100644 --- a/fs/gfs2/file.c +++ b/fs/gfs2/file.c @@ -44,7 +44,7 @@   * gfs2_llseek - seek to a location in a file   * @file: the file   * @offset: the offset - * @origin: Where to seek from (SEEK_SET, SEEK_CUR, or SEEK_END) + * @whence: Where to seek from (SEEK_SET, SEEK_CUR, or SEEK_END)   *   * SEEK_END requires the glock for the file because it references the   * file's size. @@ -52,26 +52,26 @@   * Returns: The new offset, or errno   */ -static loff_t gfs2_llseek(struct file *file, loff_t offset, int origin) +static loff_t gfs2_llseek(struct file *file, loff_t offset, int whence)  {  	struct gfs2_inode *ip = GFS2_I(file->f_mapping->host);  	struct gfs2_holder i_gh;  	loff_t error; -	switch (origin) { +	switch (whence) {  	case SEEK_END: /* These reference inode->i_size */  	case SEEK_DATA:  	case SEEK_HOLE:  		error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY,  					   &i_gh);  		if (!error) { -			error = generic_file_llseek(file, offset, origin); +			error = generic_file_llseek(file, offset, whence);  			gfs2_glock_dq_uninit(&i_gh);  		}  		break;  	case SEEK_CUR:  	case SEEK_SET: -		error = generic_file_llseek(file, offset, origin); +		error = generic_file_llseek(file, offset, whence);  		break;  	default:  		error = -EINVAL; @@ -432,7 +432,7 @@ static int gfs2_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)  	if (ret)  		goto out_unlock;  	gfs2_write_calc_reserv(ip, PAGE_CACHE_SIZE, &data_blocks, &ind_blocks); -	ret = gfs2_inplace_reserve(ip, data_blocks + ind_blocks); +	ret = gfs2_inplace_reserve(ip, data_blocks + ind_blocks, 0);  	if (ret)  		goto out_quota_unlock; @@ -441,7 +441,7 @@ static int gfs2_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)  		rblocks += data_blocks ? data_blocks : 1;  	if (ind_blocks || data_blocks) {  		rblocks += RES_STATFS + RES_QUOTA; -		rblocks += gfs2_rg_blocks(ip); +		rblocks += gfs2_rg_blocks(ip, data_blocks + ind_blocks);  	}  	ret = gfs2_trans_begin(sdp, rblocks, 0);  	if (ret) @@ -492,6 +492,7 @@ out:  static const struct vm_operations_struct gfs2_vm_ops = {  	.fault = filemap_fault,  	.page_mkwrite = gfs2_page_mkwrite, +	.remap_pages = generic_file_remap_pages,  };  /** @@ -515,18 +516,15 @@ static int gfs2_mmap(struct file *file, struct vm_area_struct *vma)  		struct gfs2_holder i_gh;  		int error; -		gfs2_holder_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &i_gh); -		error = gfs2_glock_nq(&i_gh); -		if (error == 0) { -			file_accessed(file); -			gfs2_glock_dq(&i_gh); -		} -		gfs2_holder_uninit(&i_gh); +		error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, +					   &i_gh);  		if (error)  			return error; +		/* grab lock to update inode */ +		gfs2_glock_dq_uninit(&i_gh); +		file_accessed(file);  	}  	vma->vm_ops = &gfs2_vm_ops; -	vma->vm_flags |= VM_CAN_NONLINEAR;  	return 0;  } @@ -677,10 +675,8 @@ static ssize_t gfs2_file_aio_write(struct kiocb *iocb, const struct iovec *iov,  	size_t writesize = iov_length(iov, nr_segs);  	struct dentry *dentry = file->f_dentry;  	struct gfs2_inode *ip = GFS2_I(dentry->d_inode); -	struct gfs2_sbd *sdp;  	int ret; -	sdp = GFS2_SB(file->f_mapping->host);  	ret = gfs2_rs_alloc(ip);  	if (ret)  		return ret; @@ -829,7 +825,7 @@ static long gfs2_fallocate(struct file *file, int mode, loff_t offset,  retry:  		gfs2_write_calc_reserv(ip, bytes, &data_blocks, &ind_blocks); -		error = gfs2_inplace_reserve(ip, data_blocks + ind_blocks); +		error = gfs2_inplace_reserve(ip, data_blocks + ind_blocks, 0);  		if (error) {  			if (error == -ENOSPC && bytes > sdp->sd_sb.sb_bsize) {  				bytes >>= 1; @@ -845,7 +841,7 @@ retry:  				&max_bytes, &data_blocks, &ind_blocks);  		rblocks = RES_DINODE + ind_blocks + RES_STATFS + RES_QUOTA + -			  RES_RG_HDR + gfs2_rg_blocks(ip); +			  RES_RG_HDR + gfs2_rg_blocks(ip, data_blocks + ind_blocks);  		if (gfs2_is_jdata(ip))  			rblocks += data_blocks ? data_blocks : 1;  |