|
|
| version 1.465, 2007/07/09 06:12:03 | version 1.466, 2007/07/09 06:12:55 |
|---|---|
| Line 1078 xfs_iread_extents( | Line 1078 xfs_iread_extents( |
| * also returns the [locked] bp pointing to the head of the freelist | * also returns the [locked] bp pointing to the head of the freelist |
| * as ialloc_context. The caller should hold this buffer across | * as ialloc_context. The caller should hold this buffer across |
| * the commit and pass it back into this routine on the second call. | * the commit and pass it back into this routine on the second call. |
| * | |
| * If we are allocating quota inodes, we do not have a parent inode | |
| * to attach to or associate with (i.e. pip == NULL) because they | |
| * are not linked into the directory structure - they are attached | |
| * directly to the superblock - and so have no parent. | |
| */ | */ |
| int | int |
| xfs_ialloc( | xfs_ialloc( |
| Line 1103 xfs_ialloc( | Line 1108 xfs_ialloc( |
| * Call the space management code to pick | * Call the space management code to pick |
| * the on-disk inode to be allocated. | * the on-disk inode to be allocated. |
| */ | */ |
| error = xfs_dialloc(tp, pip->i_ino, mode, okalloc, | error = xfs_dialloc(tp, pip ? pip->i_ino : 0, mode, okalloc, |
| ialloc_context, call_again, &ino); | ialloc_context, call_again, &ino); |
| if (error != 0) { | if (error != 0) { |
| return error; | return error; |
| Line 1157 xfs_ialloc( | Line 1162 xfs_ialloc( |
| if ((prid != 0) && (ip->i_d.di_version == XFS_DINODE_VERSION_1)) | if ((prid != 0) && (ip->i_d.di_version == XFS_DINODE_VERSION_1)) |
| xfs_bump_ino_vers2(tp, ip); | xfs_bump_ino_vers2(tp, ip); |
| if (XFS_INHERIT_GID(pip, vp->v_vfsp)) { | if (pip && XFS_INHERIT_GID(pip, vp->v_vfsp)) { |
| ip->i_d.di_gid = pip->i_d.di_gid; | ip->i_d.di_gid = pip->i_d.di_gid; |
| if ((pip->i_d.di_mode & S_ISGID) && (mode & S_IFMT) == S_IFDIR) { | if ((pip->i_d.di_mode & S_ISGID) && (mode & S_IFMT) == S_IFDIR) { |
| ip->i_d.di_mode |= S_ISGID; | ip->i_d.di_mode |= S_ISGID; |
| Line 1199 xfs_ialloc( | Line 1204 xfs_ialloc( |
| flags |= XFS_ILOG_DEV; | flags |= XFS_ILOG_DEV; |
| break; | break; |
| case S_IFREG: | case S_IFREG: |
| if (xfs_inode_is_filestream(pip)) { | if (pip && xfs_inode_is_filestream(pip)) { |
| error = xfs_filestream_associate(pip, ip); | error = xfs_filestream_associate(pip, ip); |
| if (error < 0) | if (error < 0) |
| return -error; | return -error; |
| Line 1208 xfs_ialloc( | Line 1213 xfs_ialloc( |
| } | } |
| /* fall through */ | /* fall through */ |
| case S_IFDIR: | case S_IFDIR: |
| if (pip->i_d.di_flags & XFS_DIFLAG_ANY) { | if (pip && (pip->i_d.di_flags & XFS_DIFLAG_ANY)) { |
| uint di_flags = 0; | uint di_flags = 0; |
| if ((mode & S_IFMT) == S_IFDIR) { | if ((mode & S_IFMT) == S_IFDIR) { |