On Wed, Nov 26, 2008 at 08:04:39PM -0500, Oren Laadan wrote:
> +int cr_scan_fds(struct files_struct *files, int **fdtable)
> +{
> +     struct fdtable *fdt;
> +     int *fds;
> +     int i, n = 0;
> +     int tot = CR_DEFAULT_FDTABLE;
> +
> +     fds = kmalloc(tot * sizeof(*fds), GFP_KERNEL);
> +     if (!fds)
> +             return -ENOMEM;
> +
> +     /*
> +      * We assume that the target task is frozen (or that we checkpoint
> +      * ourselves), so we can safely proceed after krealloc() from where
> +      * we left off; in the worst cases restart will fail.
> +      */

Task may be frozen, but it may share the table with any number of other
tasks...

> +     spin_lock(&files->file_lock);
> +     rcu_read_lock();
> +     fdt = files_fdtable(files);
> +     for (i = 0; i < fdt->max_fds; i++) {
> +             if (!fcheck_files(files, i))
> +                     continue;
> +             if (n == tot) {
> +                     /*
> +                      * fcheck_files() is safe with drop/re-acquire
> +                      * of the lock, because it tests:  fd < max_fds
> +                      */
> +                     spin_unlock(&files->file_lock);
> +                     rcu_read_unlock();
> +                     tot *= 2;       /* won't overflow: kmalloc will fail */
> +                     fds = krealloc(fds, tot * sizeof(*fds), GFP_KERNEL);
> +                     if (!fds)
> +                             return -ENOMEM;
> +                     rcu_read_lock();
> +                     spin_lock(&files->file_lock);
> +             }
> +             fds[n++] = i;
> +     }
> +     rcu_read_unlock();
> +     spin_unlock(&files->file_lock);
> +
> +     *fdtable = fds;
> +     return n;
> +}

> +     switch (inode->i_mode & S_IFMT) {
> +     case S_IFREG:
> +             fd_type = CR_FD_FILE;
> +             break;
> +     case S_IFDIR:
> +             fd_type = CR_FD_DIR;
> +             break;
> +     case S_IFLNK:
> +             fd_type = CR_FD_LINK;

Opened symlinks?  May I have whatever you'd been smoking, please?
_______________________________________________
Containers mailing list
[EMAIL PROTECTED]
https://lists.linux-foundation.org/mailman/listinfo/containers

_______________________________________________
Devel mailing list
Devel@openvz.org
https://openvz.org/mailman/listinfo/devel

Reply via email to