瀏覽代碼

GFS2: Don't use gfs2_change_nlink in link syscall

There are three users of gfs2_change_nlink which add to the link
count. Two of these are about to be removed in later patches, so
this means that there will no callers, when that happens allowing
removal of that function, also in a later patch.

Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Steven Whitehouse 14 年之前
父節點
當前提交
2baee03fb9
共有 1 個文件被更改,包括 13 次插入2 次删除
  1. 13 2
      fs/gfs2/ops_inode.c

+ 13 - 2
fs/gfs2/ops_inode.c

@@ -145,6 +145,7 @@ static int gfs2_link(struct dentry *old_dentry, struct inode *dir,
 	struct inode *inode = old_dentry->d_inode;
 	struct inode *inode = old_dentry->d_inode;
 	struct gfs2_inode *ip = GFS2_I(inode);
 	struct gfs2_inode *ip = GFS2_I(inode);
 	struct gfs2_holder ghs[2];
 	struct gfs2_holder ghs[2];
+	struct buffer_head *dibh;
 	int alloc_required;
 	int alloc_required;
 	int error;
 	int error;
 
 
@@ -230,12 +231,22 @@ static int gfs2_link(struct dentry *old_dentry, struct inode *dir,
 			goto out_ipres;
 			goto out_ipres;
 	}
 	}
 
 
-	error = gfs2_dir_add(dir, &dentry->d_name, ip, IF2DT(inode->i_mode));
+	error = gfs2_meta_inode_buffer(ip, &dibh);
 	if (error)
 	if (error)
 		goto out_end_trans;
 		goto out_end_trans;
 
 
-	error = gfs2_change_nlink(ip, +1);
+	error = gfs2_dir_add(dir, &dentry->d_name, ip, IF2DT(inode->i_mode));
+	if (error)
+		goto out_brelse;
+
+	gfs2_trans_add_bh(ip->i_gl, dibh, 1);
+	inc_nlink(&ip->i_inode);
+	ip->i_inode.i_ctime = CURRENT_TIME;
+	gfs2_dinode_out(ip, dibh->b_data);
+	mark_inode_dirty(&ip->i_inode);
 
 
+out_brelse:
+	brelse(dibh);
 out_end_trans:
 out_end_trans:
 	gfs2_trans_end(sdp);
 	gfs2_trans_end(sdp);
 out_ipres:
 out_ipres: