844 }
845 cur = xfs_btree_init_cursor(mp, NULL, agbp, agno,
846 XFS_BTNUM_INO, (xfs_inode_t *)0, 0);
847 error = xfs_inobt_lookup_ge(cur, agino, 0, 0, &tmp);
848 if (error) {
849 xfs_btree_del_cursor(cur, XFS_BTREE_ERROR);
850 cur = NULL;
851 xfs_buf_relse(agbp);
852 agbp = NULL;
853
854
855
856
857
858 agino += XFS_INODES_PER_CHUNK - 1;
859 continue;
860 }
861 }
862 if ((error = xfs_inobt_get_rec(cur, &gino, &gcnt, &gfree,
863 &i)) ||
864 i == 0) {
865 xfs_buf_relse(agbp);
866 agbp = NULL;
867 xfs_btree_del_cursor(cur, XFS_BTREE_NOERROR);
868 cur = NULL;
869 agno++;
870 agino = 0;
871 continue;
872 }
873 agino = gino + XFS_INODES_PER_CHUNK - 1;
874 buffer[bufidx].xi_startino = XFS_AGINO_TO_INO(mp, agno, gino);
875 buffer[bufidx].xi_alloccount = XFS_INODES_PER_CHUNK - gcnt;
876 buffer[bufidx].xi_allocmask = ~gfree;
877 bufidx++;
878 left--;
879 if (bufidx == bcount) {
880 long written;
881 if (formatter(ubuffer, buffer, bufidx, &written)) {
882 error = XFS_ERROR(EFAULT);
883 break;
884 }