aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2/ops_inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/gfs2/ops_inode.c')
-rw-r--r--fs/gfs2/ops_inode.c38
1 files changed, 5 insertions, 33 deletions
diff --git a/fs/gfs2/ops_inode.c b/fs/gfs2/ops_inode.c
index b2c2fe613d7..c10b914bf8c 100644
--- a/fs/gfs2/ops_inode.c
+++ b/fs/gfs2/ops_inode.c
@@ -59,7 +59,7 @@ static int gfs2_create(struct inode *dir, struct dentry *dentry,
59 gfs2_holder_init(dip->i_gl, 0, 0, ghs); 59 gfs2_holder_init(dip->i_gl, 0, 0, ghs);
60 60
61 for (;;) { 61 for (;;) {
62 inode = gfs2_createi(ghs, &dentry->d_name, S_IFREG | mode); 62 inode = gfs2_createi(ghs, &dentry->d_name, S_IFREG | mode, 0);
63 if (!IS_ERR(inode)) { 63 if (!IS_ERR(inode)) {
64 gfs2_trans_end(sdp); 64 gfs2_trans_end(sdp);
65 if (dip->i_alloc.al_rgd) 65 if (dip->i_alloc.al_rgd)
@@ -326,7 +326,7 @@ static int gfs2_symlink(struct inode *dir, struct dentry *dentry,
326 326
327 gfs2_holder_init(dip->i_gl, 0, 0, ghs); 327 gfs2_holder_init(dip->i_gl, 0, 0, ghs);
328 328
329 inode = gfs2_createi(ghs, &dentry->d_name, S_IFLNK | S_IRWXUGO); 329 inode = gfs2_createi(ghs, &dentry->d_name, S_IFLNK | S_IRWXUGO, 0);
330 if (IS_ERR(inode)) { 330 if (IS_ERR(inode)) {
331 gfs2_holder_uninit(ghs); 331 gfs2_holder_uninit(ghs);
332 return PTR_ERR(inode); 332 return PTR_ERR(inode);
@@ -379,7 +379,7 @@ static int gfs2_mkdir(struct inode *dir, struct dentry *dentry, int mode)
379 379
380 gfs2_holder_init(dip->i_gl, 0, 0, ghs); 380 gfs2_holder_init(dip->i_gl, 0, 0, ghs);
381 381
382 inode = gfs2_createi(ghs, &dentry->d_name, S_IFDIR | mode); 382 inode = gfs2_createi(ghs, &dentry->d_name, S_IFDIR | mode, 0);
383 if (IS_ERR(inode)) { 383 if (IS_ERR(inode)) {
384 gfs2_holder_uninit(ghs); 384 gfs2_holder_uninit(ghs);
385 return PTR_ERR(inode); 385 return PTR_ERR(inode);
@@ -504,47 +504,19 @@ out:
504static int gfs2_mknod(struct inode *dir, struct dentry *dentry, int mode, 504static int gfs2_mknod(struct inode *dir, struct dentry *dentry, int mode,
505 dev_t dev) 505 dev_t dev)
506{ 506{
507 struct gfs2_inode *dip = GFS2_I(dir), *ip; 507 struct gfs2_inode *dip = GFS2_I(dir);
508 struct gfs2_sbd *sdp = GFS2_SB(dir); 508 struct gfs2_sbd *sdp = GFS2_SB(dir);
509 struct gfs2_holder ghs[2]; 509 struct gfs2_holder ghs[2];
510 struct inode *inode; 510 struct inode *inode;
511 struct buffer_head *dibh;
512 u32 major = 0, minor = 0;
513 int error;
514
515 switch (mode & S_IFMT) {
516 case S_IFBLK:
517 case S_IFCHR:
518 major = MAJOR(dev);
519 minor = MINOR(dev);
520 break;
521 case S_IFIFO:
522 case S_IFSOCK:
523 break;
524 default:
525 return -EOPNOTSUPP;
526 };
527 511
528 gfs2_holder_init(dip->i_gl, 0, 0, ghs); 512 gfs2_holder_init(dip->i_gl, 0, 0, ghs);
529 513
530 inode = gfs2_createi(ghs, &dentry->d_name, mode); 514 inode = gfs2_createi(ghs, &dentry->d_name, mode, dev);
531 if (IS_ERR(inode)) { 515 if (IS_ERR(inode)) {
532 gfs2_holder_uninit(ghs); 516 gfs2_holder_uninit(ghs);
533 return PTR_ERR(inode); 517 return PTR_ERR(inode);
534 } 518 }
535 519
536 ip = ghs[1].gh_gl->gl_object;
537
538 ip->i_di.di_major = major;
539 ip->i_di.di_minor = minor;
540
541 error = gfs2_meta_inode_buffer(ip, &dibh);
542
543 if (!gfs2_assert_withdraw(sdp, !error)) {
544 gfs2_dinode_out(ip, dibh->b_data);
545 brelse(dibh);
546 }
547
548 gfs2_trans_end(sdp); 520 gfs2_trans_end(sdp);
549 if (dip->i_alloc.al_rgd) 521 if (dip->i_alloc.al_rgd)
550 gfs2_inplace_release(dip); 522 gfs2_inplace_release(dip);