|
|
| version 1.151, 2006/09/18 06:12:51 | version 1.152, 2007/07/09 15:45:29 |
|---|---|
| Line 202 xfs_bulkstat_one_dinode( | Line 202 xfs_bulkstat_one_dinode( |
| return 0; | return 0; |
| } | } |
| STATIC int | |
| xfs_bulkstat_one_fmt( | |
| void __user *ubuffer, | |
| const xfs_bstat_t *buffer) | |
| { | |
| if (copy_to_user(ubuffer, buffer, sizeof(*buffer))) | |
| return -EFAULT; | |
| return sizeof(*buffer); | |
| } | |
| /* | /* |
| * Return stat information for one inode. | * Return stat information for one inode. |
| * Return 0 if ok, else errno. | * Return 0 if ok, else errno. |
| Line 221 xfs_bulkstat_one( | Line 231 xfs_bulkstat_one( |
| xfs_bstat_t *buf; /* return buffer */ | xfs_bstat_t *buf; /* return buffer */ |
| int error = 0; /* error value */ | int error = 0; /* error value */ |
| xfs_dinode_t *dip; /* dinode inode pointer */ | xfs_dinode_t *dip; /* dinode inode pointer */ |
| bulkstat_one_fmt_pf formatter = private_data ? : xfs_bulkstat_one_fmt; | |
| dip = (xfs_dinode_t *)dibuff; | dip = (xfs_dinode_t *)dibuff; |
| *stat = BULKSTAT_RV_NOTHING; | *stat = BULKSTAT_RV_NOTHING; |
| Line 243 xfs_bulkstat_one( | Line 254 xfs_bulkstat_one( |
| xfs_bulkstat_one_dinode(mp, ino, dip, buf); | xfs_bulkstat_one_dinode(mp, ino, dip, buf); |
| } | } |
| if (copy_to_user(buffer, buf, sizeof(*buf))) { | error = formatter(buffer, buf); |
| if (error < 0) { | |
| error = EFAULT; | error = EFAULT; |
| goto out_free; | goto out_free; |
| } | } |
| *stat = BULKSTAT_RV_DIDONE; | *stat = BULKSTAT_RV_DIDONE; |
| if (ubused) | if (ubused) |
| *ubused = sizeof(*buf); | *ubused = error; |
| out_free: | out_free: |
| kmem_free(buf, sizeof(*buf)); | kmem_free(buf, sizeof(*buf)); |
| Line 748 xfs_bulkstat_single( | Line 760 xfs_bulkstat_single( |
| return 0; | return 0; |
| } | } |
| int | |
| xfs_inumbers_fmt( | |
| void __user *ubuffer, /* buffer to write to */ | |
| const xfs_inogrp_t *buffer, /* buffer to read from */ | |
| long count, /* # of elements to read */ | |
| long *written) /* # of bytes written */ | |
| { | |
| if (copy_to_user(ubuffer, buffer, count * sizeof(*buffer))) | |
| return -EFAULT; | |
| *written = count * sizeof(*buffer); | |
| return 0; | |
| } | |
| /* | /* |
| * Return inode number table for the filesystem. | * Return inode number table for the filesystem. |
| */ | */ |
| Line 756 xfs_inumbers( | Line 781 xfs_inumbers( |
| xfs_mount_t *mp, /* mount point for filesystem */ | xfs_mount_t *mp, /* mount point for filesystem */ |
| xfs_ino_t *lastino, /* last inode returned */ | xfs_ino_t *lastino, /* last inode returned */ |
| int *count, /* size of buffer/count returned */ | int *count, /* size of buffer/count returned */ |
| xfs_inogrp_t __user *ubuffer)/* buffer with inode descriptions */ | void __user *ubuffer,/* buffer with inode descriptions */ |
| inumbers_fmt_pf formatter) | |
| { | { |
| xfs_buf_t *agbp; | xfs_buf_t *agbp; |
| xfs_agino_t agino; | xfs_agino_t agino; |
| Line 835 xfs_inumbers( | Line 861 xfs_inumbers( |
| bufidx++; | bufidx++; |
| left--; | left--; |
| if (bufidx == bcount) { | if (bufidx == bcount) { |
| if (copy_to_user(ubuffer, buffer, | long written; |
| bufidx * sizeof(*buffer))) { | if (formatter(ubuffer, buffer, bufidx, &written)) { |
| error = XFS_ERROR(EFAULT); | error = XFS_ERROR(EFAULT); |
| break; | break; |
| } | } |
| ubuffer += bufidx; | ubuffer += written; |
| *count += bufidx; | *count += bufidx; |
| bufidx = 0; | bufidx = 0; |
| } | } |
| Line 862 xfs_inumbers( | Line 888 xfs_inumbers( |
| } | } |
| if (!error) { | if (!error) { |
| if (bufidx) { | if (bufidx) { |
| if (copy_to_user(ubuffer, buffer, | long written; |
| bufidx * sizeof(*buffer))) | if (formatter(ubuffer, buffer, bufidx, &written)) |
| error = XFS_ERROR(EFAULT); | error = XFS_ERROR(EFAULT); |
| else | else |
| *count += bufidx; | *count += bufidx; |