generic_make_request - callback does not work

Zhukov Andrew <[email protected]>
Newsgroups org.kernel.vger.linux-newbie
Message-ID <CAA3FJ=SNw9AEvriERDfyPuwcwLEkeku=Zb8q-Rp48Yyxwgx95w@mail.gmail.com>
Hi all!

I have the next code of driver:

void my_end_request(struct bio* child, int error)
{
  my_private_t*    private = child->bi_private;
  complete((struct completion*)private->completion);
}

int my_submit_request
(
    my_handle_t*   handle,
    int             rw,
    int             mode,
    struct bio*     bio,
    void*           user_private_data,
    bio_end_io_t*   user_callback
)
{
  struct bio*       child     = NULL;
  my_private_t*    private   = NULL;
  my_registry_t*   registry  = NULL;
  int               direction = -1;
  DECLARE_COMPLETION_ONSTACK(completion);

  registry = handle->registry;

  direction = bio_data_dir(bio);

  child = bio_clone(bio, GFP_NOIO);

  private = my_private_get(registry->my_cache_private); // here we get
a structure, that contains some of our data

  child->bi_end_io = (bio_end_io_t*)my_end_request; // set the callback

  child->bi_bdev = handle->bdev; // reading will be doing from this device

  private->completion = &completion;

  private->parent = bio;
  private->user_private_data = user_private_data;
  private->user_callback = user_callback;
  private->mode = mode;
  private->handle = handle;
  child->bi_private = private;

  generic_make_request(child);
  wait_for_completion(&completion); // waiting to complete the reading

  // yet another code

}

I'm trying to redirect requests (only read) to another device. In a
function my_submit_request I'm call the bio_clone and then
generic_make_request.
And also I'm call wait_for_completion (& completion) for waiting for
the reading. The callback function should work when the reading will
be completed.
The problem is, no callback call, and wait_for_completion does not
return control.
What am I doing wrong?
--
To unsubscribe from this list: send the line "unsubscribe linux-newbie" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.linux-learn.org/faqs
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.