Как скопировать struct файл?

Я переношу старый код ядра linux на более новую версию 2.6.32.

Есть часть, которая копирует дескриптор файла. Идея была в том, чтобы выделить новый дескриптор файла и новый struct file и использовать их с другим f_op и , оставив все остальные поля struct file эквивалентными оригинальным.

Как это сделать в современном ядре? Я написал примерную реализацию, но не знаю, следует ли мне вызывать file_get, path_get или использовать инкрементацию счетчика.

struct file * copy_file(const struct file * iOrig, int * oNewFd) {
  if (!orig)
    return 0; 
  *oNewFd = get_unused_fd();
  if (*oNewFd < 0)
    return 0;
  struct file * rv = alloc_file(orig->f_path.mnt, orig->f_path.dentry, orig->f_path.mode, orig->f_op);
  if (!rv)
    goto free_fd;
  fd_install(fd, rv);
  return rv;
free_fd:
  put_unused_fd(*oNewFd)
  return 0;
}

P.S. На самом деле копирование всех файлов исходного файла не обязательно. Мне просто нужно разрешить новый набор файловых операций в пространстве пользователя. Так что создание нового дескриптора, принадлежащего current с заданным f_op, будет сделано.

9
задан Basilevs 25 August 2010 в 16:36
поделиться