Loading fs/xfs/linux-2.6/xfs_buf.c +7 −17 Original line number Diff line number Diff line Loading @@ -458,15 +458,8 @@ _pagebuf_lookup_pages( unlock_page(bp->pb_pages[i]); } if (page_count) { /* if we have any uptodate pages, mark that in the buffer */ bp->pb_flags &= ~PBF_NONE; /* if some pages aren't uptodate, mark that in the buffer */ if (page_count != bp->pb_page_count) bp->pb_flags |= PBF_PARTIAL; } PB_TRACE(bp, "lookup_pages", (long)page_count); return error; } Loading Loading @@ -676,7 +669,7 @@ xfs_buf_read_flags( pb = xfs_buf_get_flags(target, ioff, isize, flags); if (pb) { if (PBF_NOT_DONE(pb)) { if (!XFS_BUF_ISDONE(pb)) { PB_TRACE(pb, "read", (unsigned long)flags); XFS_STATS_INC(pb_get_read); pagebuf_iostart(pb, flags); Loading Loading @@ -813,7 +806,7 @@ pagebuf_get_no_daddr( bp = pagebuf_allocate(0); if (unlikely(bp == NULL)) goto fail; _pagebuf_initialize(bp, target, 0, len, PBF_FORCEIO); _pagebuf_initialize(bp, target, 0, len, 0); try_again: data = kmem_alloc(malloc_len, KM_SLEEP | KM_MAYFAIL); Loading Loading @@ -1121,21 +1114,18 @@ pagebuf_iodone_work( void pagebuf_iodone( xfs_buf_t *pb, int dataio, int schedule) { pb->pb_flags &= ~(PBF_READ | PBF_WRITE); if (pb->pb_error == 0) { pb->pb_flags &= ~(PBF_PARTIAL | PBF_NONE); } if (pb->pb_error == 0) pb->pb_flags &= ~PBF_NONE; PB_TRACE(pb, "iodone", pb->pb_iodone); if ((pb->pb_iodone) || (pb->pb_flags & PBF_ASYNC)) { if (schedule) { INIT_WORK(&pb->pb_iodone_work, pagebuf_iodone_work, pb); queue_work(dataio ? xfsdatad_workqueue : xfslogd_workqueue, &pb->pb_iodone_work); queue_work(xfslogd_workqueue, &pb->pb_iodone_work); } else { pagebuf_iodone_work(pb); } Loading Loading @@ -1235,7 +1225,7 @@ _pagebuf_iodone( { if (atomic_dec_and_test(&pb->pb_io_remaining) == 1) { pb->pb_locked = 0; pagebuf_iodone(pb, (pb->pb_flags & PBF_FS_DATAIOD), schedule); pagebuf_iodone(pb, schedule); } } Loading fs/xfs/linux-2.6/xfs_buf.h +6 −16 Original line number Diff line number Diff line Loading @@ -69,14 +69,11 @@ typedef enum page_buf_flags_e { /* pb_flags values */ PBF_READ = (1 << 0), /* buffer intended for reading from device */ PBF_WRITE = (1 << 1), /* buffer intended for writing to device */ PBF_MAPPED = (1 << 2), /* buffer mapped (pb_addr valid) */ PBF_PARTIAL = (1 << 3), /* buffer partially read */ PBF_ASYNC = (1 << 4), /* initiator will not wait for completion */ PBF_NONE = (1 << 5), /* buffer not read at all */ PBF_DELWRI = (1 << 6), /* buffer has dirty pages */ PBF_STALE = (1 << 7), /* buffer has been staled, do not find it */ PBF_FS_MANAGED = (1 << 8), /* filesystem controls freeing memory */ PBF_FS_DATAIOD = (1 << 9), /* schedule IO completion on fs datad */ PBF_FORCEIO = (1 << 10), /* ignore any cache state */ PBF_FLUSH = (1 << 11), /* flush disk write cache */ PBF_READ_AHEAD = (1 << 12), /* asynchronous read-ahead */ Loading @@ -92,9 +89,6 @@ typedef enum page_buf_flags_e { /* pb_flags values */ _PBF_DELWRI_Q = (1 << 21), /* buffer on delwri queue */ } page_buf_flags_t; #define PBF_UPDATE (PBF_READ | PBF_WRITE) #define PBF_NOT_DONE(pb) (((pb)->pb_flags & (PBF_PARTIAL|PBF_NONE)) != 0) #define PBF_DONE(pb) (((pb)->pb_flags & (PBF_PARTIAL|PBF_NONE)) == 0) typedef struct xfs_bufhash { struct list_head bh_list; Loading Loading @@ -258,7 +252,6 @@ extern void pagebuf_unlock( /* unlock buffer */ extern void pagebuf_iodone( /* mark buffer I/O complete */ xfs_buf_t *, /* buffer to mark */ int, /* use data/log helper thread. */ int); /* run completion locally, or in * a helper thread. */ Loading Loading @@ -378,12 +371,12 @@ extern void pagebuf_trace( #define XFS_BUF_GETERROR(x) pagebuf_geterror(x) #define XFS_BUF_ISERROR(x) (pagebuf_geterror(x)?1:0) #define XFS_BUF_DONE(x) ((x)->pb_flags &= ~(PBF_PARTIAL|PBF_NONE)) #define XFS_BUF_UNDONE(x) ((x)->pb_flags |= PBF_PARTIAL|PBF_NONE) #define XFS_BUF_ISDONE(x) (!(PBF_NOT_DONE(x))) #define XFS_BUF_DONE(x) ((x)->pb_flags &= ~PBF_NONE) #define XFS_BUF_UNDONE(x) ((x)->pb_flags |= PBF_NONE) #define XFS_BUF_ISDONE(x) (((x)->pb_flags & PBF_NONE) == 0) #define XFS_BUF_BUSY(x) ((x)->pb_flags |= PBF_FORCEIO) #define XFS_BUF_UNBUSY(x) ((x)->pb_flags &= ~PBF_FORCEIO) #define XFS_BUF_BUSY(x) do { } while (0) #define XFS_BUF_UNBUSY(x) do { } while (0) #define XFS_BUF_ISBUSY(x) (1) #define XFS_BUF_ASYNC(x) ((x)->pb_flags |= PBF_ASYNC) Loading Loading @@ -412,9 +405,6 @@ extern void pagebuf_trace( #define XFS_BUF_BP_ISMAPPED(bp) 1 #define XFS_BUF_DATAIO(x) ((x)->pb_flags |= PBF_FS_DATAIOD) #define XFS_BUF_UNDATAIO(x) ((x)->pb_flags &= ~PBF_FS_DATAIOD) #define XFS_BUF_IODONE_FUNC(buf) (buf)->pb_iodone #define XFS_BUF_SET_IODONE_FUNC(buf, func) \ (buf)->pb_iodone = (func) Loading Loading @@ -510,7 +500,7 @@ static inline void xfs_buf_relse(xfs_buf_t *bp) pagebuf_trace(bp, id, NULL, (void *)__builtin_return_address(0)) #define xfs_biodone(pb) \ pagebuf_iodone(pb, (pb->pb_flags & PBF_FS_DATAIOD), 0) pagebuf_iodone(pb, 0) #define xfs_biomove(pb, off, len, data, rw) \ pagebuf_iomove((pb), (off), (len), (data), \ Loading Loading
fs/xfs/linux-2.6/xfs_buf.c +7 −17 Original line number Diff line number Diff line Loading @@ -458,15 +458,8 @@ _pagebuf_lookup_pages( unlock_page(bp->pb_pages[i]); } if (page_count) { /* if we have any uptodate pages, mark that in the buffer */ bp->pb_flags &= ~PBF_NONE; /* if some pages aren't uptodate, mark that in the buffer */ if (page_count != bp->pb_page_count) bp->pb_flags |= PBF_PARTIAL; } PB_TRACE(bp, "lookup_pages", (long)page_count); return error; } Loading Loading @@ -676,7 +669,7 @@ xfs_buf_read_flags( pb = xfs_buf_get_flags(target, ioff, isize, flags); if (pb) { if (PBF_NOT_DONE(pb)) { if (!XFS_BUF_ISDONE(pb)) { PB_TRACE(pb, "read", (unsigned long)flags); XFS_STATS_INC(pb_get_read); pagebuf_iostart(pb, flags); Loading Loading @@ -813,7 +806,7 @@ pagebuf_get_no_daddr( bp = pagebuf_allocate(0); if (unlikely(bp == NULL)) goto fail; _pagebuf_initialize(bp, target, 0, len, PBF_FORCEIO); _pagebuf_initialize(bp, target, 0, len, 0); try_again: data = kmem_alloc(malloc_len, KM_SLEEP | KM_MAYFAIL); Loading Loading @@ -1121,21 +1114,18 @@ pagebuf_iodone_work( void pagebuf_iodone( xfs_buf_t *pb, int dataio, int schedule) { pb->pb_flags &= ~(PBF_READ | PBF_WRITE); if (pb->pb_error == 0) { pb->pb_flags &= ~(PBF_PARTIAL | PBF_NONE); } if (pb->pb_error == 0) pb->pb_flags &= ~PBF_NONE; PB_TRACE(pb, "iodone", pb->pb_iodone); if ((pb->pb_iodone) || (pb->pb_flags & PBF_ASYNC)) { if (schedule) { INIT_WORK(&pb->pb_iodone_work, pagebuf_iodone_work, pb); queue_work(dataio ? xfsdatad_workqueue : xfslogd_workqueue, &pb->pb_iodone_work); queue_work(xfslogd_workqueue, &pb->pb_iodone_work); } else { pagebuf_iodone_work(pb); } Loading Loading @@ -1235,7 +1225,7 @@ _pagebuf_iodone( { if (atomic_dec_and_test(&pb->pb_io_remaining) == 1) { pb->pb_locked = 0; pagebuf_iodone(pb, (pb->pb_flags & PBF_FS_DATAIOD), schedule); pagebuf_iodone(pb, schedule); } } Loading
fs/xfs/linux-2.6/xfs_buf.h +6 −16 Original line number Diff line number Diff line Loading @@ -69,14 +69,11 @@ typedef enum page_buf_flags_e { /* pb_flags values */ PBF_READ = (1 << 0), /* buffer intended for reading from device */ PBF_WRITE = (1 << 1), /* buffer intended for writing to device */ PBF_MAPPED = (1 << 2), /* buffer mapped (pb_addr valid) */ PBF_PARTIAL = (1 << 3), /* buffer partially read */ PBF_ASYNC = (1 << 4), /* initiator will not wait for completion */ PBF_NONE = (1 << 5), /* buffer not read at all */ PBF_DELWRI = (1 << 6), /* buffer has dirty pages */ PBF_STALE = (1 << 7), /* buffer has been staled, do not find it */ PBF_FS_MANAGED = (1 << 8), /* filesystem controls freeing memory */ PBF_FS_DATAIOD = (1 << 9), /* schedule IO completion on fs datad */ PBF_FORCEIO = (1 << 10), /* ignore any cache state */ PBF_FLUSH = (1 << 11), /* flush disk write cache */ PBF_READ_AHEAD = (1 << 12), /* asynchronous read-ahead */ Loading @@ -92,9 +89,6 @@ typedef enum page_buf_flags_e { /* pb_flags values */ _PBF_DELWRI_Q = (1 << 21), /* buffer on delwri queue */ } page_buf_flags_t; #define PBF_UPDATE (PBF_READ | PBF_WRITE) #define PBF_NOT_DONE(pb) (((pb)->pb_flags & (PBF_PARTIAL|PBF_NONE)) != 0) #define PBF_DONE(pb) (((pb)->pb_flags & (PBF_PARTIAL|PBF_NONE)) == 0) typedef struct xfs_bufhash { struct list_head bh_list; Loading Loading @@ -258,7 +252,6 @@ extern void pagebuf_unlock( /* unlock buffer */ extern void pagebuf_iodone( /* mark buffer I/O complete */ xfs_buf_t *, /* buffer to mark */ int, /* use data/log helper thread. */ int); /* run completion locally, or in * a helper thread. */ Loading Loading @@ -378,12 +371,12 @@ extern void pagebuf_trace( #define XFS_BUF_GETERROR(x) pagebuf_geterror(x) #define XFS_BUF_ISERROR(x) (pagebuf_geterror(x)?1:0) #define XFS_BUF_DONE(x) ((x)->pb_flags &= ~(PBF_PARTIAL|PBF_NONE)) #define XFS_BUF_UNDONE(x) ((x)->pb_flags |= PBF_PARTIAL|PBF_NONE) #define XFS_BUF_ISDONE(x) (!(PBF_NOT_DONE(x))) #define XFS_BUF_DONE(x) ((x)->pb_flags &= ~PBF_NONE) #define XFS_BUF_UNDONE(x) ((x)->pb_flags |= PBF_NONE) #define XFS_BUF_ISDONE(x) (((x)->pb_flags & PBF_NONE) == 0) #define XFS_BUF_BUSY(x) ((x)->pb_flags |= PBF_FORCEIO) #define XFS_BUF_UNBUSY(x) ((x)->pb_flags &= ~PBF_FORCEIO) #define XFS_BUF_BUSY(x) do { } while (0) #define XFS_BUF_UNBUSY(x) do { } while (0) #define XFS_BUF_ISBUSY(x) (1) #define XFS_BUF_ASYNC(x) ((x)->pb_flags |= PBF_ASYNC) Loading Loading @@ -412,9 +405,6 @@ extern void pagebuf_trace( #define XFS_BUF_BP_ISMAPPED(bp) 1 #define XFS_BUF_DATAIO(x) ((x)->pb_flags |= PBF_FS_DATAIOD) #define XFS_BUF_UNDATAIO(x) ((x)->pb_flags &= ~PBF_FS_DATAIOD) #define XFS_BUF_IODONE_FUNC(buf) (buf)->pb_iodone #define XFS_BUF_SET_IODONE_FUNC(buf, func) \ (buf)->pb_iodone = (func) Loading Loading @@ -510,7 +500,7 @@ static inline void xfs_buf_relse(xfs_buf_t *bp) pagebuf_trace(bp, id, NULL, (void *)__builtin_return_address(0)) #define xfs_biodone(pb) \ pagebuf_iodone(pb, (pb->pb_flags & PBF_FS_DATAIOD), 0) pagebuf_iodone(pb, 0) #define xfs_biomove(pb, off, len, data, rw) \ pagebuf_iomove((pb), (off), (len), (data), \ Loading