* most cases but may be reset (e.g. XFS recovery).
         */
        pb->pb_buffer_length = pb->pb_count_desired = range_length;
-       pb->pb_flags = flags | PBF_NONE;
+       pb->pb_flags = flags;
        pb->pb_bn = XFS_BUF_DADDR_NULL;
        atomic_set(&pb->pb_pin_count, 0);
        init_waitqueue_head(&pb->pb_waiters);
                        unlock_page(bp->pb_pages[i]);
        }
 
-       if (page_count)
-               bp->pb_flags &= ~PBF_NONE;
+       if (page_count == bp->pb_page_count)
+               bp->pb_flags |= PBF_DONE;
 
        PB_TRACE(bp, "lookup_pages", (long)page_count);
        return error;
 {
        pb->pb_flags &= ~(PBF_READ | PBF_WRITE);
        if (pb->pb_error == 0)
-               pb->pb_flags &= ~PBF_NONE;
+               pb->pb_flags |= PBF_DONE;
 
        PB_TRACE(pb, "iodone", pb->pb_iodone);
 
 
        PBF_WRITE = (1 << 1),   /* buffer intended for writing to device   */
        PBF_MAPPED = (1 << 2),  /* buffer mapped (pb_addr valid)           */
        PBF_ASYNC = (1 << 4),   /* initiator will not wait for completion  */
-       PBF_NONE = (1 << 5),    /* buffer not read at all                  */
+       PBF_DONE = (1 << 5),    /* all pages in the buffer uptodate        */
        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  */
 #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_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_DONE(x)                 ((x)->pb_flags |= PBF_DONE)
+#define XFS_BUF_UNDONE(x)       ((x)->pb_flags &= ~PBF_DONE)
+#define XFS_BUF_ISDONE(x)       ((x)->pb_flags & PBF_DONE)
 
 #define XFS_BUF_BUSY(x)                 do { } while (0)
 #define XFS_BUF_UNBUSY(x)       do { } while (0)