Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 84451
b: refs/heads/master
c: c43f408
h: refs/heads/master
i:
  84449: 4a5dad4
  84447: a4fa3ef
v: v3
  • Loading branch information
Christoph Hellwig authored and Lachlan McIlroy committed Feb 7, 2008
1 parent 00b4f59 commit 8059c7a
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 26 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 613d70436c1aeda6843ca8b70c7fab6d0484a591
refs/heads/master: c43f408795c3210c9f5c925e4a49dbb93d41bb57
78 changes: 53 additions & 25 deletions trunk/fs/xfs/linux-2.6/xfs_iops.c
Original file line number Diff line number Diff line change
Expand Up @@ -555,33 +555,61 @@ xfs_vn_permission(

STATIC int
xfs_vn_getattr(
struct vfsmount *mnt,
struct dentry *dentry,
struct kstat *stat)
struct vfsmount *mnt,
struct dentry *dentry,
struct kstat *stat)
{
struct inode *inode = dentry->d_inode;
bhv_vattr_t vattr = { .va_mask = XFS_AT_STAT };
int error;

error = xfs_getattr(XFS_I(inode), &vattr, ATTR_LAZY);
if (likely(!error)) {
stat->size = i_size_read(inode);
stat->dev = inode->i_sb->s_dev;
stat->rdev = (vattr.va_rdev == 0) ? 0 :
MKDEV(sysv_major(vattr.va_rdev) & 0x1ff,
sysv_minor(vattr.va_rdev));
stat->mode = vattr.va_mode;
stat->nlink = vattr.va_nlink;
stat->uid = vattr.va_uid;
stat->gid = vattr.va_gid;
stat->ino = vattr.va_nodeid;
stat->atime = vattr.va_atime;
stat->mtime = vattr.va_mtime;
stat->ctime = vattr.va_ctime;
stat->blocks = vattr.va_nblocks;
stat->blksize = vattr.va_blocksize;
struct inode *inode = dentry->d_inode;
struct xfs_inode *ip = XFS_I(inode);
struct xfs_mount *mp = ip->i_mount;

xfs_itrace_entry(ip);

if (XFS_FORCED_SHUTDOWN(mp))
return XFS_ERROR(EIO);

stat->size = XFS_ISIZE(ip);
stat->dev = inode->i_sb->s_dev;
stat->mode = ip->i_d.di_mode;
stat->nlink = ip->i_d.di_nlink;
stat->uid = ip->i_d.di_uid;
stat->gid = ip->i_d.di_gid;
stat->ino = ip->i_ino;
#if XFS_BIG_INUMS
stat->ino += mp->m_inoadd;
#endif
stat->atime = inode->i_atime;
stat->mtime.tv_sec = ip->i_d.di_mtime.t_sec;
stat->mtime.tv_nsec = ip->i_d.di_mtime.t_nsec;
stat->ctime.tv_sec = ip->i_d.di_ctime.t_sec;
stat->ctime.tv_nsec = ip->i_d.di_ctime.t_nsec;
stat->blocks =
XFS_FSB_TO_BB(mp, ip->i_d.di_nblocks + ip->i_delayed_blks);


switch (inode->i_mode & S_IFMT) {
case S_IFBLK:
case S_IFCHR:
stat->blksize = BLKDEV_IOSIZE;
stat->rdev = MKDEV(sysv_major(ip->i_df.if_u2.if_rdev) & 0x1ff,
sysv_minor(ip->i_df.if_u2.if_rdev));
break;
default:
if (ip->i_d.di_flags & XFS_DIFLAG_REALTIME) {
/*
* If the file blocks are being allocated from a
* realtime volume, then return the inode's realtime
* extent size or the realtime volume's extent size.
*/
stat->blksize =
xfs_get_extsz_hint(ip) << mp->m_sb.sb_blocklog;
} else
stat->blksize = xfs_preferred_iosize(mp);
stat->rdev = 0;
break;
}
return -error;

return 0;
}

STATIC int
Expand Down

0 comments on commit 8059c7a

Please sign in to comment.